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

2016-02-19 11:54 1 1 收藏

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

【 tulaoshi.com - 编程语言 】

这样删除会导致程序内存覆盖等一系列不可预知的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.
}
}

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1599077.html

延伸阅读
下面的是学C++时要注重的。 1.把C++当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C++》,不要看《C++变成死相》; 3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看; 4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他...
问题 C语言以及C++语言中的const究竟表示什么?其具体的实现机制又是如何实现的呢? 本文将对这两个问题进行一些分析,简单解释const的含义以及实现机制。 问题分析 简单的说const在C语言中表示只读的变量,而在C++语言中表示常量。关于const在C与C++语言中的使用以及更多的区别,以后有时间另开一贴说明。 那么const究竟是如何实现的...
C++中,成员指针是最为复杂的语法结构。但在事件驱动和多线程应用中被广泛用于调用回叫函数。在多线程应用中,每个线程都通过指向成员函数的指针来调用该函数。在这样的应用中,如果不用成员指针,编程是非常困难的。 刚遇到这种语法时也许会让你止步不前。但你会发现,使用恰当的类型定义之后,复杂的语法是可以简化的。本文引导你了解成...
在编写代码做测试时发现两个大数相乘结果不正确的问题,测试代码如下: #include "stdafx.h" #includestdlib.h #includetime.h int _tmain(int argc, _TCHAR* argv[]) {      time_t temp1=1345172428000000;     time_t temp2=1345172428*1000000;    ::system("pause");     r...
    富有活力的语言需要不断改变和成长,C++也不例外。在本文中,Bjarne Stroustrup提出了自己对C++的设计和演化的看法。 !-- frame contents -- !-- /frame contents -- 为了让编译器、工具和类库实现者跟上节奏,让用户吸收标准C++所支持的编程技术,在早有预计的、沉寂了几年之后,委员会再次考虑...

经验教程

52

收藏

20
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部