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 循环中的内存分配

如何使用单个 for 循环遍历 std::map<string,int> 和 std::vector<int>?

C++ OpenMP 并行 For 循环 - std::vector 的替代品 [关闭]