首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教multi地图.erase改了

2012-12-31 
请问multimap.erase改了?我记得multimap.erase(iter)返回不是void么?今天用的时候返回指向下一个元素的迭

请问multimap.erase改了?
我记得multimap.erase(iter);返回不是void么?
今天用的时候返回指向下一个元素的迭代器。。。难道改了?
刚才又去看了书,书上写的也是返回void啊。。。
代码如下
multimap<string,string> mStr;
typedef multimap<string,string>::iterator mIter;

mStr.insert(make_pair("AAA","A");
mStr.insert(make_pair("AAA","B");
mStr.insert(make_pair("BBB","A");
mStr.insert(make_pair("BBB","B");
mStr.insert(make_pair("BBB","B");
mStr.insert(make_pair("BBB","C");
mStr.insert(make_pair("CCC","A");

mIter mit = mStr.find("BBB");
size_t size = mStr.count("BBB");

for(size_t i=0;i!=size;++i,++mit)
{
    if(mit->second=="B")
    {
        mit = mStr.erase(mit); //问题就在这里。
                               //这里删除以后可以返回指向下一个元素的迭代器
    }
}

请问是版本问题?还是我理解错了?




[解决办法]
map删元素后,原迭代器失效,肯定要有返回的。
[解决办法]
看看上下文说什么。如果意思真是erase返回void,那么书错了
iterator erase(
   iterator _Where
);
iterator erase(
   iterator _First,
   iterator _Last
);
size_type erase(
   const key_type& _Key
);
 
3个重载都有返回值。第3个返回删除的元素数量。
[解决办法]
有可能印刷错误,该印iterator 而不是void

热点排行