C++ multimap容器逆序迭代器转化为顺序迭代器的函数base()的问题,难带base的用法不正确?

base()我是在网上看到的http://apps.hi.baidu.com/share/detail/16219142#include<iostream>#includ... base()我是在网上看到的
http://apps.hi.baidu.com/share/detail/16219142

#include <iostream>
#include <map>
#include <utility>

using namespace std;

int main()
{
multimap<int,int> tmap;/*定义tmap为关键字不唯一的map关联容器*/
/*把1,2,3,4,5,6添入容器*/
tmap.insert(make_pair(1,1));tmap.insert(make_pair(2,2));
tmap.insert(make_pair(3,3));tmap.insert(make_pair(4,4));
tmap.insert(make_pair(5,5));tmap.insert(make_pair(6,6));

multimap<int,int>::iterator kp = tmap.end();
/*删除最后一个元素*/
tmap.erase(--kp);/*第一种方法不会导致逆序输出出错*/
//tmap.erase(tmap.rbegin().base());/*第二种方法会导致逆序输出出现运行错误,为什么*/

/*注:base()是把逆序迭代器转化为顺序迭代器,因为ease函数不接受逆序迭代器作为参数*/

/*输出删除后tmap的大小,此处输出为5,说明删除成功!?*/
cout << "The size of tmap is:"<< tmap.size() << endl;

/*用逆序迭代器逆序输出时,第二种删除方法出错*/
for(mp = tmap.rbegin(); mp != tmap.rend(); ++mp)
cout << mp->first << " ";
cout << endl;

return 0;
}
--------------------------------------
当用第二种时,屏幕输出
The size of tmap is:5
后面就出错了
昨天自己看书知道了,假设mp是一个逆序迭代器,mp和mp.base()不是指向同一个元素
展开
 我来答
粉的情调
2014-12-14 · 超过10用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:25.2万
展开全部
erase((++rit).base())
OR erase(--(rit.base()))
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式