map,vector 等容器内容的循环删除问题(C++)
2017-06-08 15:57
302 查看
map,vector 等容器内容的循环删除问题(C++)
map,vector等容器的循环删除不能用普通的方法删除:for(auto p=list.begin();p!=list.end();p++) list.erase(p);
类似的方式,会出错的,不信你调试试试 :)
这里使用了一个` iterator` 的一个自增/自减 ,来巧妙的实现了, 删除当前的`iterator,` 但是有给当前的`iterator`赋值为其下一个的操作,不至于删除后,当前的 `iterator` 就失效了!
代码:
#include <iostream> #include <vector> #include <map> using namespace std; int main() { const char* strs[] = { "str1", "str2", "str3", "str4", "str5", "str6", "str7", "str8", "str9", "str10" }; cout << "Hello World\n"; map<string, string> list; vector<string> arr; for (int i = 9; i>=0; i--) { list.emplace(std::make_pair(strs[i], strs[i])); arr.emplace_back(strs[i]); } auto pos = list.end(); pos--;//取得倒数第一个的位置 while (pos!= list.end() && list.size()>3) list.erase(pos--);//关键在这里 while (arr.size() > 3) arr.erase(--arr.end());//关键在这里 for (auto s : list) { cout << s.first.data() << " " << s.second.data() << "\n"; } for (auto s : arr) { cout << s.data()<< "\n"; } return 0; }
输出:
Hello World str1 str1 str10 str10 str2 str2 str10 str9 str8
相关文章推荐
- C++容器vector和map的正确删除方法
- 算法小记(二)写 C++ 中STL容器中map 和 vector 遇到的问题
- C++容器vector和map的正确删除方法
- 【C++】循环删除vector等容器内的元素
- C++学习笔记(字符串string、vector_deque、queue,multiset、map、multimap、容器拷贝问题)(复制粘贴,方便后面翻阅)
- C++学习笔记(字符串string、vector_deque、queue,multiset、map、multimap、容器拷贝问题)
- c++容器(vector|map)中使用函数指针
- 循环删除vector和map中的元素
- 循环删除vector和map中的元素(转)
- [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- 【语言-C++】C++容器:list、vector、hash、map的区别及使用范围
- C++模板类 容器之map 及 对象副本 深/浅拷贝 等问题
- vector iterators incompatible 删除map,list中元素时,应注意的问题
- vector、map容器删除操作总结
- [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
- 文本查询程序(c++)set,vector,map容器实现
- ZOJ1109 使用了C++中的map容器这时问题就会变得很简单,不过我想下次不用模板做下
- 删除元素【C++】顺序容器 Vector 注意事项
- C++ stl list、map、vector删除元素