C++ for循环中vector和map的erase
Posted 肥宝Fable
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ for循环中vector和map的erase相关的知识,希望对你有一定的参考价值。
直接用erase后返回的iter赋值过去就好了,没删就自增。
好记性不如烂笔头,还是得记下来。o(∩_∩)o 哈哈
std::vector<int> a = 1,2,3,4,5,6,7,8;
for (std::vector<int>::iterator iter = a.begin(); iter != a.end(); )
if (*iter % 2 == 0)
iter = a.erase(iter);//STL中有要求vector的erase函数要返回指向被erase的迭代器的下一个位置,写成it=intVec.erase(it)是万无一失的,
else
++iter;
std::map<int, int> b;
b[1] = 5;
b[2] = 6;
b[3] = 7;
b[4] = 8;
for (std::map<int, int>::iterator iter = b.begin(); iter != b.end();)
if (iter->first % 2 == 0)
iter = b.erase(iter);//这个只有在C++11才能有效
b.erase(iter++);//这个是旧版的也有效
else
++iter;
以上是关于C++ for循环中vector和map的erase的主要内容,如果未能解决你的问题,请参考以下文章
C++ STL容器在for循环中删除迭代器 正确方法 it++正确吗
C++ STL容器在for循环中删除迭代器 正确方法 it++正确吗
[转] C++ STL中map.erase(it++)用法原理解析
c++ 在 for 循环中的 vector<char> 中的 for 循环中的内存分配