您的位置:首页 > 产品设计 > UI/UE

顺序容器vector、list、deque(整理中)

2014-01-08 22:50 218 查看
vector: 向量容器,使用线性存储结构,


list: 双向链表容器,


deque: 双端队列容器,


1.对容器vector,list,deque进行自增操作是需要注意的问题:
[b] list,deque可以直接对begin(),end()进行++或者--操作,但是vector不行;

[/b]
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), [b]c.push_front(t) ,c.insert(p,t) , c.insert(p, n ,t), c.insert(p,b,e)[/b]

// t 为元素,p,b,e为迭代器,n表示个数,

其中 c.push_front(t)只适用于list和deque.(这两种都是双向容器)

5.访问顺序容器内的元素的操作:c.back() , c.front() , c
, c.at(n);


其中 [b]c
, c.at(n)只适用于vector和deque
[/b]



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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: