c/c++ 标准容器 forward_list resize 操作
程序员文章站
2022-06-28 10:35:37
c/c++ 标准容器 forward_list, resize, 重新定位迭代器 1,forward_list特有的方法: + insert_after + emplace_after + erase_after 2,容器的插入删除操作后的注意事项 + 必须保证每次改变容器的操作后都正确地重新定位迭 ......
c/c++ 标准容器 forward_list, resize, 重新定位迭代器
1,forward_list特有的方法:
- insert_after
- emplace_after
- erase_after
2,容器的插入删除操作后的注意事项
- 必须保证每次改变容器的操作后都正确地重新定位迭代器。
- 如果在循环中插入/删除deque,vector,string中的元素,不要缓存end返回的迭代器。
知识点
1,forward_list容器的使用,对应代码里的test1
2,resize的使用,对应代码里的test2
3,容器的插入删除操作后的注意事项,对应代码里的test3
#include <iostream> #include <vector> #include <string> #include <list> #include <forward_list> #include <deque> using namespace std; int main(){ //test1 forward_list容器的使用 //insert_after,emplace_after,erase_after /* forward_list<int> fl{0,1,2,3,4,5}; //返回头迭代器 auto head = fl.before_begin(); //在head的后面插入6,并返回指向6的迭代器,第一个元素是6 auto it = fl.insert_after(head, 6); cout << *it << endl; for(auto s : fl){ cout << s << " "; } cout << endl; auto it1 = fl.erase_after(it); cout << *it1 << endl; for(auto s : fl){ cout << s << " "; } cout << endl; fl.pop_front(); for(auto s : fl){ cout << s << " "; } cout << endl; */ //test2 resize //如果当前容器的大小大于所要求的大小,容器后部的元素会被删除; //如果当前容器的大小小于所要去的大小,会讲新元素添加到容器的后部 /* list<int> li(5,11); cout << li.size() << endl; for(auto s : li){ cout << s << " "; } cout << endl; li.resize(7,2); cout << li.size() << endl; for(auto s : li){ cout << s << " "; } cout << endl; li.resize(3,8);//因为3小于原来容器的大小7,所以第二个参数8就被忽略了 cout << li.size() << endl; for(auto s : li){ cout << s << " "; } cout << endl; */ //test3 容器的插入删除操作可能使迭代器失效 vector<int> vi = {0,1,2,3,4,5,6,7,8,9}; auto it = vi.begin(); //这里每次都会重新去取得尾迭代器,不会有问题, //如果提前把end保存了的话,改变vi后,end就失效了,会死循环等 while(it != vi.end()){ //奇数的时候 if(*it % 2){ it = vi.insert(it, *it); //重新设定迭代器,让it指向下一个奇数 it += 2; } //偶数的时候 else{ it = vi.erase(it); } } for(auto s : vi){ cout << s << " "; } cout << endl; }
c/c++ 学习互助qq群:877684253
本人微信:xiaoshitou5854
推荐阅读
-
C++之标准模板库STL续(容器,算法)
-
C++容器操作基础
-
c/c++ 标准顺序容器 之 push_back,push_front,insert,emplace 操作
-
c/c++ 标准容器 vector的内存空间是如何自动增长的
-
c/c++ 标准顺序容器 容器的访问,删除 操作
-
c/c++ 标准容器 forward_list resize 操作
-
C++ 标准模板库 STL 顺序容器详解
-
C++ vector容器 find erase的使用操作:查找并删除指定元素
-
C++的面向对象和泛型编程思想——STL(标准模板库)常用容器之stack、queue容器(栈与队列)
-
(C++)错误的map删除操作和STL中容器的迭代器的底层实现机制