c++ map,mutimap删除问题分析

pianbrhuan

pianbrhuan

2016-02-19 11:54

生活已是百般艰难,为何不努力一点。下面图老师就给大家分享c++ map,mutimap删除问题分析,希望可以让热爱学习的朋友们体会到设计的小小的乐趣。

这样删除会导致程序内存覆盖等一系列不可预知的bug
代码如下:

mapstring, string::iterator iter;
for ( iter = mm.begin();iter != mm.end(); iter ++ )
{
if ( iter-second == something )
{
mm.erase( iter );
}
}

原因:当erase掉iter后,继续执行iter++,这个时候就乱套了
正确方法:
代码如下:

for (iter = mm.begin();iter != mm.end();)
{
if ( iter-second == something )
{
mm.erase( iter++ );
}
else
{
iter++; // Use Pre Increment for efficiency.
}
}

可能有人不理解mm.erase(iter++)
其实和这个是一样的
代码如下:

for (iter = mm.begin();iter != mm.end();)
{
if ( iter-second == something )
{
mapstring, string::iterator iter_erase;
iter_erase = iter++ //先保存后++再删除
mm.erase( iter_erase );
}
else
{
iter++; // Use Pre Increment for efficiency.
}
}

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

c++ map,mutimap删除问题分析

编程语言 网络编程
c++ map,mutimap删除问题分析

C/C++编程新手错误分析

编程语言 网络编程
C/C++编程新手错误分析

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

OpenCV 2.4.3 C++ 平滑处理分析

编程语言 网络编程
OpenCV 2.4.3 C++ 平滑处理分析

C++ sizeof 使用规则及陷阱分析

编程语言 网络编程
C++ sizeof 使用规则及陷阱分析

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

C++

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
C++

深入C++中API的问题详解

编程语言 网络编程
深入C++中API的问题详解

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

c#(Socket)异步套接字代码示例

c#(Socket)异步套接字代码示例

设置Excel2007工作表的背景图案

设置Excel2007工作表的背景图案
下拉加载更多内容 ↓