请问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