顺序容器的操作

操作                                                      功能                                                            适用容器

c.push_back(t)                      在容器尾部插入一个元素                                               所有的顺序容器

 

c.push_front(t)                      在容器c的前端添加值为t的元素,返回void类型                     同上

 

c.insert(p, t)                          在迭代器p所指向的元素前面 插入值为t的新元素                 只适用于list和deque容器类型

                                             返回指向新添加元素的迭代器                                         

 

c.insert(p, n, t)                      在迭代器p所指向的元素前面 插入n个值为t的信元素              同上

                                             返回void类型

c.insert(p, b, e)                      在迭代器p所指向的元素前面 插入有迭代器b和e标记            同上

                                             的范围内的元素 。返回void类型

c.size()                                 返回容器c中的元素个数,返回类型为c::size_type              所有的顺序容器

 

c.max_size()                         返回容器c可容纳的最多元素个数 ,返回类型c::size_type         ..

 

c.empty()                              返回标记容器大小是否为0的布尔值                                       ..

 

c.resize(n)                             调整容器c的长度大小,使其能容纳n个元素,如果n<c.size(),    ..

                                            则删除多出来的元素;否则,添加采用值初始化的新元素

(例如:list<int> ilist(10,42);//10 ints:each has value 42

            ilist.resize(18);//adds 8 elements of value 0 to back of ilist)

c.resize(n, t)                          调整人容器c的大小,使其能容纳n个元素,所有新添加              ..

                                             的元素值都为t

c.back()                                 返回容器c的最后一个元素的引用。如果c为空则该操作未定义

 

c.front()                                 返回容器c的第一个元素的引用,若为空则此操作未定义

 

c[n]                                       返回下标为n的元素的引用,

                                             如果n<0或n>= c.size(),则该操作未定义                         只适用于vector和deque容器

 

c.at(n)                                    返回下标为n的元素的引用,若下标越界则操作未定义            同上

(注:调用front或back函数前,或在对begin或end返回的迭代器进行解引用运算前,必须保证ilist容器非空

同时如果给出的下标无效,at函数将会抛出out_of_range异常)

c.erase(p)                              删除迭代器p所指向的元素,返回一个迭代器,

                                            它指向被删除元素后面的元素。如果p指向容器内的最后一个

                                            元素,则返回的迭代器指向容器的超出末端的下一位置。

                                            如果p本身就是指向超出末端的下一位置的迭代器

                                            则该函数未定义。

 

c.erase(b,e)                           删除迭代器b和e所标记范围内所有的元素

                                            返回一个迭代器,他指向被删除元素段后面的元素。

                                            如果e本身就是指向超出末端的下一位置的迭代器,则

                                            返回的迭代器也指向超出容器末端的下一位置

c.clear()                                删除容器c内的所有元素。返回void

 

c.pop_back()                          删除容器c的最后一个元素。返回void。

                                             如果c为空容器,则该函数未定义

 

c.pop_front()                         删除容器c的第一个元素。返回void。                           只用于list和deque容器

                                             如果c为空容器,则该函数未定义

 

c1 = c2                                删除容器c1的多有元素,然后将c2的元素复制给c1。

                                            c1和c2的类型(包括容器类型和元素类型)必须相同

 

c1.swap(c2)                          交换内容:调用完该函数后,c1中存放的是c2原来的

                                             元素,c2中存放的则是c1原来的元素。

                                             c1和c2的类型必须相同。该函数的执行速度通常要比

                                             将c2的元素复制到c1的操作快

c.assgin(b,e)                          重新设置c的元素:将迭代器b和e标记的范围内所有的

                                             元素复制到c中。b和e必须不是指向c中元素的迭代器

 

c.assign(n, t)                         将容器c重新设置为存储n个值为t的元素

 

 

(注:迭代器可以指向超出末端的下一位置,这是一个不存在的元素,因此insert函数是在其指向位置之前而非其后插入元素)

注意:

1、insert(p, t)这一版本的函数,其返回指向新插入元素的迭代器,可使用该返回值在容器中的指定位置重复插入元素

例如:list<string> lst;

         list<string>::iterator iter=  lst.begin();

         while(cin>>word)

             iter = lst.insert(iter, word);//起功能等效于调用push_front函数

2、存储end操作返回的迭代器有时会导致灾难性错误:

例如

 

该段代码即将导致死循环。

原因:由于在循环体中的太添加运算导致了存储在last中的迭代器失效

解决方案:

在每次做完插入运算后重新计算end迭代器的值:

例如://recalculate end on each trip whenever the loop adds/erases elements

while(first != v.end()){

       first = v.insert(first, 42);

       ++first;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值