c++ 遍历map时删除当前元素正确方法

for(tmp_it=m_wcard.begin();tmp_it!=m_wcard.end();){m_wcard.erase(tmp_it++);}代码简化了,就是删... for(tmp_it = m_wcard.begin(); tmp_it != m_wcard.end(); )
{
m_wcard.erase(tmp_it ++);
}

代码简化了,就是删除迭代器指向的当前的map里的元素,迭代器不会失效,我用了上述的办法程序直接崩溃
for(tmp_it = m_wcard.begin(); tmp_it != m_wcard.end(); )
{
if(!player->wcard.check_timeout(ttTimeBak))
{
player->Send_WeekCard(award_list,ttTimeBak,cardAward.start_time,interval);
++ tmp_it;
}
else{
player->wcard.wcard_type = 0;
ZLOG_DEBUG("username = %s",tmp_it->second->username.c_str());
std::map<int,player_ptr>::iterator it1 = tmp_it;
tmp_it ++;
m_wcard.erase(it1);
ZLOG_DEBUG("username = %s",tmp_it->second->username.c_str());
}
}
展开
 我来答
OrzLRK
推荐于2016-01-31 · 超过11用户采纳过TA的回答
知道答主
回答量:16
采纳率:0%
帮助的人:22.6万
展开全部
如果是清空map的话建议用mp.clear()。
你的代码貌似是没有错的啊,用了dev-c++运行没有问题
这里是我的代码,运行无问题,与你的代码应该是一样的
for(map<int,int>::iterator it=mp.begin();it!=mp.end();)
mp.erase(it++);
是不是其它的语句影响的呢?
或者改为这个试试
for(map<int,int>::iterator it=mp.begin(),next;it!=mp.end();)
{
next=it;
next++;
mp.erase(it);
it=next;
}
更多追问追答
追问
不是清空,我只是写了简单了。其实就删除当前迭代器指向的元素,运行就挂。迭代器失效,没有办法指向下个元素
追答
已经更新
扯淡书生
2014-05-23 · TA获得超过122个赞
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:103万
展开全部
for(tmp_it = m_wcard.begin(); tmp_it != m_wcard.end(); tmp_it++)
{
m_wcard.erase(tmp_it);
}
改成这样试下,我没调试。。。
追问
OrzLRK,补充问题了,字数超了,没办法补全代码...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式