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()); //不合法
为啥呢 展开
map<int,int> m;
m.erase(m.begin()); //合法
m.erase(m.rbegin()); //不合法
为啥呢 展开
2个回答
展开全部
map的erase的重载版本之一定义如下:
iterator erase(iterator _Where);
它的参数是iterator
而rbegin()的返回值是reverse_iterator,与所需参数不一致,也不能自动转换,因此语句不合法
但是,可以使用erase的另一个重载版本:
size_type erase(const key_type& _Key);
此时,语句应该写成如下的形式:
m.erase(m.rbegin()->first);
这样就可以成功调用了
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询