C++Primer-Sequential Container
时间:2010-08-09 来源:Forge09151111
容器是特定类型对象的集合
所谓顺序容器就是单一类型的集合,然后根据位置来存储和读取这些元素。
C++提供的3种顺序容器:
vector 连续的 允许随机访问 高效的随机访问元素
list 不连续的 不支持随机访问 高效地插入和删除任何地址的元素
deque 连续的 允许随机访问 高效地两端插入和删除元素
选择sc提示:
1.随机访问元素选择vector或者deque
2.中间位置插入或者删除元素则采用list容器
3.尾部或者首部则采用deque容器
4.如果需要先插入元素再随机访问则可以先把元素读入到list容器,然后进行排序,再顺序访问,然后将元素复制到vector进行随机访问
容器的初始化:
C<T> c; 一个命名为c的空容器, T代表元素类型,C为容器类型
C c(c2); 创建c2的副本c
C c(b, e); 创建迭代器范围b到e的c容器
C c(n, t); 创建n个值为t的c容器
C c(n); 创建n个值的c容器
容器的操作:
1.添加
c.push_back(t) 在c的末尾添加t
c.push_front(t) 在c的首部添加t(仅适用于list和deque)
c.insert(p,t) 在c的p所指向的位置添加t为新元素
c.insert(p,n,t) 在c中p所指向的位置添加n个t为新元素
c.insert(p,b,e) 在c中p所指向的位置添加迭代器b和e标记范围内的元素
任何对容器的添加可能会使迭代器失效
2.删除
c.erase(p) 删除迭代器p所指向的元素,返回一个指向被删除元素后的元素的迭代器
c.erase(b,e) 删除容器中b到e所标记范围内所有元素,返回值同上
c.clear() 删除所有元素
c.pop_back() 删除容器最后一个元素
c.pop_front() 删除容器第一个元素
任何对容器的删除操作也许会使迭代器失效
3.大小操作
c.size() 返回容器中的元素个数
c.max_size() 返回容器最多可以容纳的元素个数
c.empty() 标记容器是否为0(返回bool)
c.resize(n) 调整容器大小
c.resize(n,t) 调整大小并且设置新元素为t
4.访问元素
c.back() 返回容器中最后一个元素
c.front() 返回容器中第一个元素
c[n] 访问下标为n的元素的引用
c.at[n] 同上
关于vector的自我增长
#include <iostream>
#include <vector>
using namespace std; int main() {
vector<int> ivec;//定义一个未初始化的vector 类型为int
cout<<"ivec:size"<<ivec.size()<<endl //获得vector大小
<<"capacity: "<<ivec.capacity()<<endl;//获得vector的剩余存储大小
for(vector<int>::size_type ix=0; ix != 24; ++ix) {//将vector填满
ivec.push_back(ix);
}
cout<<"ivec: size: "<<ivec.size()
<<"capacity: "<<ivec.capacity()<<endl;
ivec.reserve(50);//设置vector的预留空间
cout<<"ivec: siaz:"<<ivec.size()
<<"capacity: "<<ivec.capacity()<<endl;
return 0;
}
0 0 24 32 24 50
#include <vector>
using namespace std; int main() {
vector<int> ivec;//定义一个未初始化的vector 类型为int
cout<<"ivec:size"<<ivec.size()<<endl //获得vector大小
<<"capacity: "<<ivec.capacity()<<endl;//获得vector的剩余存储大小
for(vector<int>::size_type ix=0; ix != 24; ++ix) {//将vector填满
ivec.push_back(ix);
}
cout<<"ivec: size: "<<ivec.size()
<<"capacity: "<<ivec.capacity()<<endl;
ivec.reserve(50);//设置vector的预留空间
cout<<"ivec: siaz:"<<ivec.size()
<<"capacity: "<<ivec.capacity()<<endl;
return 0;
}
0 0 24 32 24 50
相关阅读 更多 +