C++ for循环中vector和map的erase

 直接用erase后返回的iter赋值过去就好了,没删就自增。

好记性不如烂笔头,还是得记下来。o(∩_∩)o 哈哈

	std::vector a = {1,2,3,4,5,6,7,8};
	for (std::vector::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 b;
	b[1] = 5;
	b[2] = 6;
	b[3] = 7;
	b[4] = 8;
	for (std::map::iterator iter = b.begin(); iter != b.end();)
	{
		if (iter->first % 2 == 0)
		{
			iter = b.erase(iter);//这个只有在C++11才能有效
            b.erase(iter++);//这个是旧版的也有效
		}
		else
		{
			++iter;
		}
	}

 

你可能感兴趣的:(C++)