c++ 关于map的begin()与rbegin()

为什么map<int,int>m;m.erase(m.begin());//合法m.erase(m.rbegin());//不合法为啥呢... 为什么
map<int,int> m;
m.erase(m.begin()); //合法
m.erase(m.rbegin()); //不合法
为啥呢
展开
 我来答
真白的纱雾d442c
推荐于2016-02-28 · TA获得超过1093个赞
知道小有建树答主
回答量:265
采纳率:0%
帮助的人:539万
展开全部
map的erase的重载版本之一定义如下:
iterator erase(iterator _Where);
它的参数是iterator
而rbegin()的返回值是reverse_iterator,与所需参数不一致,也不能自动转换,因此语句不合法

但是,可以使用erase的另一个重载版本:
size_type erase(const key_type& _Key);
此时,语句应该写成如下的形式:
m.erase(m.rbegin()->first);
这样就可以成功调用了

参考资料: http://expression.microsoft.com/zh-cn/library/x8t0bd10%28fr-fr,printer%29.aspx

愚子珍Tg
2011-06-11 · TA获得超过1883个赞
知道小有建树答主
回答量:1827
采纳率:0%
帮助的人:934万
展开全部
改一下这两行:
VSTR::reverse_iterator i;
for(i=chinese.rbegin();i!=chinese.rend();++i)
我改后就可以运行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式