C++ STL map 删除一个元素 erase() 操作

	std::map::iterator iter=m_intmap.begin();
	for (iter;iter!=m_intmap.end();)
	{
		if (iter->first==1)
		{
			m_cintmap.erase(iter++);
		}
		else
		{
			iter++;
		}
	}


为什么不是

m_cintmap.erase(iter);

如果我们用了上面的语句,会这样:

在map中把iter指向的内存删除了。

然后循环用iter与m_intmap.end()比较,这里就出问题了,iter指向的内存已经删了……于是程序崩溃


主要问题在于

erase() 函数将 iter 指向的地址删除后,不会主动更改iter指向下一个地址。于是我们要手动设置 iter 指向下一个地址。


iter++

自加操作,将iter指向下一个地址并且返回 iter 原来的副本,这样

erase 操作删掉了 iter 原来指向的地址,并且 iter 已经成功指向了下一个元素


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