vector: 向量容器,使用线性存储结构,
list: 双向链表容器,
deque: 双端队列容器,
int a[ ] = {1,2,3,4,5};
vector<int> ivec(a,a+5);
cout << *(ivec.begin()++) << endl; //错误:ivec.begin()++,++ivec.begin(),
//iivec.end()--,--ivec.end()操作都不正确
list<int> lis(a,a+5);
cout << *(++lis.begin()) << endl; //上述操作都可以
deque<int> ide;
for(int i=0; i!=5;++i)
de.push_back(a[i]);
cout << ide.front() << '\t' << *++ide.begin() << endl;
cout << ide.back () << '\t' << *--ide.end()<< endl; //上述操作都可以
2. vector ,list ,deque初始化时,type<T> c(b,e),创建容器c,其元素是迭代器b和e标示的范围内元素的副本。
指针不是迭代器,所以会出现上述对list和vector可以用数组初始化,相当于运用指针;但是对deque不行。
3.往容器中添加元素的操作:c.push_back(t), c.push_front(t) ,c.insert(p,t) , c.insert(p, n ,t), c.insert(p,b,e)
// t 为元素,p,b,e为迭代器,n表示个数,
其中 c.push_front(t)只适用于list和deque.(这两种都是双向容器)
5.访问顺序容器内的元素的操作:c.back() , c.front() , c[n] , c.at(n);
其中 c[n] , c.at(n)只适用于vector和deque
6.删除顺序容器内元素的操作:c.erase(p), c.erase(b,e), c.clear() , c.pop_back() (删除最后一个元素), c.pop_front()(删除第一个元素)
其中c.pop_front() 只适用于list 或 deque 容器。
注意:c.erase(b,e),此处删除的是从迭代器b开始 到 迭代器e-1的元素
注意:c.erase(p)返回的迭代器是指向删除元素后边的元素,所以在应用时一定要注意,下方程序为删除vector<int> iVec
中的偶数,没有红色部分的操作则很可能会报错
for ( iterV = iVec.begin();iterV != iVec.end();++iterV )
if ( *iterV%2==0 )
{
iterV = iVec.erase(iterV);
if ( iterV != iVec.begin() )
--iterV;
else
continue;
}
7.关于迭代器运算
例如type<int>::iterator iter = velue.begin(),//iter表示迭代器
*iter; iter->men; ++iter;--iter; iter++;iter--;iter1 == iter2;iter1 != iter2; 这些操作对于vector,list,deque都可以
注意:vector 和deque容器的迭代器提供的额外运算,以下操作不可用于list
iter+n; iter-n;
iter 1+= iter2;iter1 -= iter2;iter1-iter2;
iter1 > iter2; iter1 < iter2; iter1 >= iter2; iter1 >= iter2;