c++list容器的插入和删除

函数原型:
push_back(elem);//在容器尾部加入一个元素
pop_back();//删除容器中最后一个元素
push_front(elem);//在容器开头插入一个元素
pop_front();//从容器开头移除第一个元素
insert(pos,elem);//pos位置插
elem元素的拷贝,返回新数据的位置

insert(pos,n,elem);//pos位置插入nelem数据,无返回值。
insert(pos,beg,end);//pos位置插入[beg,end)区间的数据,无返回值。
clear();//移除容器的所有数据
erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。
erase(pos);//删除pos位置的数据,返回下一个数据的位置。
remove(elem);//删除容器中所有与elem值匹配的元素

和之前比,基本的种类是一致的,但是在每一种类中的细节处有区别,主要的区别在于list是链表的形式,所以可以进行前后的插入删除操作

同时注意返回值的问题,有的操作是能产生有效的返回值的,返回的是下一个数据的位置,也就是返回一个迭代器,同时注意中间插入和删除也是输入迭代器,而且因为list的迭代器是只能一个一个向前,所以list查询中间位置的迭代器时间较慢,遍历的耗时较多,但是插入删除的时候因为移动数据较少,所以插入删除的操作反倒是会变快

同时注意多了一个特别的种类,remove,会批量删除全部匹配数据。

同时,要注意,删除和添加数据不会使得list的迭代器发生改变,这个地方要特别注意,比如本来L是第二个数据的迭代器,然后这个时候在第二个位置这插入了一个新的数据,那么这个时候,原本的迭代器就变成了指向第三个数据,但是指向那个数据本身这件事,是没有变的,变的是数据在list容器中的位置

  printlist(l1);
  list<int>::iterator L = l1.begin();
  cout << *L <<endl;
  l1.insert(++L,1000);
  printlist(l1);
  cout << *L <<endl;
  l1.insert(L,2000);
  printlist(l1);
  cout << *L <<endl;

300 200 100 10 20
300
300 1000 200 100 10 20
200
300 1000 2000 200 100 10 20
200

300 200 100 10 20
300
300 1000 200 100 10 20
200
posted @   纸包鱼  阅读(962)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示