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

最新文章

  1. php 中文字符串首字母的获取函数
  2. InstallShield2008脚本安装制作方法Setup
  3. java邮件小实例
  4. mysqldump 命令的使用
  5. Random Forest Classification of Mushrooms
  6. redhat mysql安装配置
  7. LeetCode 287. Find the Duplicate Number (找到重复的数字)
  8. BZOJ 2179 [快速傅里叶变换 高精度乘法]
  9. nodejs技术升阶思路
  10. Web.Debug.config和Web.Release.config设置xdt:Transform无效的解决办法
  11. Java:JavaBean和BeanUtils
  12. RBAC功能模块
  13. discuz模板引擎
  14. [设计模式][C++]单例模式
  15. python获取动态网站上面的动态加载的数据(selenium+Firefox)
  16. 禅道导出数据,excel打开为乱码处理
  17. flink写入mysql的两种方式
  18. HDU3710-Battle Over Cities
  19. 【ExtJS】一些基本概念的梳理
  20. Ubuntu窗口大小调节方法

热门文章

  1. [机器学习]回归--(Simple LR and Multiple LR)
  2. react入门学习及总结
  3. [CF960G] Bandit Blues
  4. SHELL脚本--tr命令用法和特性全解
  5. 手动生成/etc/shadow文件中的密码
  6. Go Web:自带的ServeMux multiplexer
  7. 使用NetworkX模块绘制深度神经网络(DNN)结构图
  8. Winform系列——好用的DataGridview过滤控件(表格的高级搜索功能)
  9. C#线程安全类型
  10. Linux日志 系统日志及分析