c++顺序容器(2)

1.向顺序容器添加元素

c.push_back(t);c.emplace_back(args);//在c的尾部创建一个值为t或由args创建的元素,返回void。若在头部,back改为front

c.insert(p,t);c,emplace(p,args);   c.insert(p,n,t);(插入n个)  c.insert(p,b,e);(迭代器范围) c.insert(p,i1);(列表)

注:a.除array和forward_list外,每个顺序容器都支持push_back.

     b.只有list,forward_list,deque支持push_front

     c.vector,list,deque,string支持insert,但是除list外,其他插入操作很耗时

     d.string是一个字符容器

     e.若给insert传递一对迭代器,不能指向添加元素的目标容器

     f.while(cin>>word)  iter=lst.insert(iter,word);//循环插入新元素,iter每次都被更新为新元素的前一个位置

     g.使用emplace时,是将参数传递给元素类型的构造函数。而使用insert和push时,是将元素类型的对象拷贝到容器中。

2.访问元素

c.back(); c.front(); //首元素和尾元素的引用,c不为空,back不适用于forward_list

c[n]; c.at(n); //n不能越界,适用于string,vector,deque,array

注:

a.访问成员函数返回的是引用(如front,back,下标和at)

3.删除元素

c.pop_back(); c.pop_front(); c.erase(p); c.erase(b,e); c.clear();

4.特殊的forward_list操作

因为forward_list是一个单向链表,删除一个元素时会改变前一个元素的链接,因此其操作函数为:

lst.before_begin();   lst.cbefore_begin(); lst.insert_after(p,t); lst.insert_after(p,n,t); lst.insert_after(p,b,e); lst.insert_after(p,i1);

emplace_after(p,args); lst.erase_after(p);//删除p后的一个元素 lst.erase_after(b,e);

从以上函数看出添加或删除元素时,只关注两个迭代器。一个是要处理的元素,另一个是指向其前驱。

5.改变容器大小

c.resize(n);//调整c的大小为n,若n<c.size(),多余的元素舍弃,否则添加新元素初始化

c.resize(n,t);//任何新添加的元素初始化为t

6.容器操作使迭代器失效

添加:

若为vector或string,插入位置之前的指针、迭代器和引用仍有效,之后的失效

deque,插入到中间,都会失效

list和forward_list都有效

删除与添加相仿。

7.vector对象时如何增长的

vector将元素连续存储,但是这样插入元素时要移动其他元素。所以在创建时预留一些空间,用来保存更多的新元素。

c.shrink_to_fit();//将capacity()减少为size(),适用于vector、string、deque

c.capacity();//c可保存的元素个数    c.reserve(n);分配至少能容纳n个元素的空间

posted on 2016-03-10 23:46  sccy  阅读(152)  评论(0编辑  收藏  举报