注意:此程序在win环境下会出现上述描述的问题;在mac环境下第一种方式是正常运行的。Map.erase有3个重载函数:
void erase(iterator position);
size_type erase(const key_type& x); // 这个如果size_type为int,则返回值为1时代表删除成功,为0代表删除失败。
void erase(iterator first, iterator last); // 相当于map.clean()。
1. 错误示范
备注:map是关联式容器,调用erase后,当前迭代器已经失效
std::map<<span>int</span>, <span>int</span>><span> mmap;
mmap[</span><span>0</span>] = <span>0</span><span>;
mmap[</span><span>1</span>] = <span>1</span><span>;
mmap[</span><span>2</span>] = <span>2</span><span>;
mmap[</span><span>3</span>] = <span>3</span><span>;
std::map</span><<span>int</span>, <span>int</span>>:: iterator it =<span> mmap.begin();
</span><span>for</span>( ; it!=mmap.end(); it++<span>)
{
</span><span>if</span>(it->first == <span>2</span><span>)
{
mmap.erase(it); </span><span>//</span><span>执行后,it失效,程序崩溃。</span><span> }
}</span>
2. 正确示范(1)
std::map<<span>int</span>, <span>int</span>><span> mmap;
mmap[</span><span>0</span>] = <span>0</span><span>;
mmap[</span><span>1</span>] = <span>1</span><span>;
mmap[</span><span>2</span>] = <span>2</span><span>;
mmap[</span><span>3</span>] = <span>3</span><span>;
std::map</span><<span>int</span>, <span>int</span>>:: iterator it =<span> mmap.begin();
</span><span>for</span>( ; it!=mmap.end(); it++<span>)
{
</span><span>if</span>(it->first == <span>2</span><span>)
{
mmap.erase(it</span>++); <span>//</span><span> erase之后,令当前迭代器指向其后继。</span><span> }
}</span>
3. 正确示范(2)
备注:利用erase的返回值,注意,有些版本的stl-map没有返回值,比如SGI版,但vc版的有。
std::map<<span>int</span>, <span>int</span>><span> mmap;
mmap[</span><span>0</span>] = <span>0</span><span>;
mmap[</span><span>1</span>] = <span>1</span><span>;
mmap[</span><span>2</span>] = <span>2</span><span>;
mmap[</span><span>3</span>] = <span>3</span><span>;
std::map</span><<span>int</span>, <span>int</span>>:: iterator it =<span> mmap.begin();
</span><span>for</span>( ; it!=<span>mmap.end(); )
{
</span><span>if</span>(it->first == <span>2</span><span>)
{
it </span>= mmap.erase(it); <span>//</span><span> erase的返回值是指向被删除元素的后继元素的迭代器</span><span> }
</span><span>else</span><span>
{
it</span>++<span>;
}
}
</span>
原文:https://www.cnblogs.com/rednodel/p/10783924.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!