map,vector 等容器内容的循环删除问题(C++)
map,vector 等容器内容的循环删除问题(C++)
map,vector等容器的循环删除不能用普通的方法删除:
for(auto p=list.begin();p!=list.end();p++) list.erase(p);
类似的方式,会出错的,不信你调试试试 :)
这里使用了一个` iterator` 的一个自增/自减 ,来巧妙的实现了, 删除当前的`iterator,` 但是又给当前的`iterator`赋值为其下一个的操作,不至于删除后,当前的 `iterator` 就失效了!
代码:
1 #include <iostream> 2 #include <vector> 3 #include <map> 4 using namespace std; 5 6 int main() 7 { 8 const char* strs[] = { 9 "str1", 10 "str2", 11 "str3", 12 "str4", 13 "str5", 14 "str6", 15 "str7", 16 "str8", 17 "str9", 18 "str10" 19 }; 20 cout << "Hello World\n"; 21 22 map<string, string> list; 23 vector<string> arr; 24 for (int i = 9; i>=0; i--) { 25 list.emplace(std::make_pair(strs[i], strs[i])); 26 arr.emplace_back(strs[i]); 27 } 28 auto pos = list.end(); 29 pos--;//取得倒数第一个的位置 30 while (pos!= list.end() && list.size()>3) 31 list.erase(pos--);//关键在这里 32 while (arr.size() > 3) 33 arr.erase(--arr.end());//关键在这里 34 for (auto s : list) { 35 cout << s.first.data() << " " << s.second.data() << "\n"; 36 } 37 for (auto s : arr) { 38 cout << s.data()<< "\n"; 39 } 40 return 0; 41 }
输出:
Hello World str1 str1 str10 str10 str2 str2 str10 str9 str8
使用一个` iterator` 的一个自增/自减 ,来巧妙的实现了:
删除当前的`iterator`,又有给当前的`iterator`赋值为其下一个的位置,不至于删除后,当前的 `iterator` 就失效了!
代码参考:
//vector的删除某些项 //vector<T> list; auto& it = list.begin(); while (it!=list.end()){ if (it->Code == `Code`) it = list.erase(it);//返回下一个元素iterator else it++; } //map的删除某些项 // map<string,T> mapA; 1.直接删除指定项 mapA.erase(str1); 2.直接删除指定位置的项 mapA.erase(pos); 3.删除符合条件的项 for (auto it = _chwList.begin(); it != _chwList.end();) { if (it->second->Code==`Code`) _chwList.erase(it++); else it++; }
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
原文链接:https://www.cnblogs.com/lzpong/p/6963300.html
--- auth:lzpong
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!