用const_reverse_iterator迭代的问题
(转载请注明来源于金庆的专栏)
以下代码:
typedef std::vector<int> IntVec;
IntVec v;
for (IntVec::const_reverse_iterator itr = v.rbegin();
itr != v.rend(); ++itr)
;
itr != v.rend()这一行报错:
error: no match for 'operator!=' in 'itr != std::vector<_Tp, _Alloc>::rend()
[with _Tp = int, _Alloc = std::allocator<int>]()'|
STL迭代的代码写过许多, 突然出现这种错误有点不敢相信.
仔细看了一遍没有拼写错误, 又判断不出是什么错, 网上一查才知道原因.
应该是v.rend()结果为reverse_iterator, 所以operator!=无法比较两个不同的类型.
把v改为:
const IntVec v;
或者改比较式为:
itr != ((const IntVec &)v).rend();
都可以解决这个错误.
以前总是用reverse_iterator, 没碰到过这种错误. 以后还是仍用reverse_iterator算了.
const_reverse_iterator太长了点, 代码会不好看.
又试了试VC2005, 它不会报错.
参考:
http://topic.youkuaiyun.com/u/20070121/17/fd98d4b3-d3df-4061-9fbd-6b62b6946b7f.html?1131336059
(转载请注明来源于金庆的专栏)
以下代码:
typedef std::vector<int> IntVec;
IntVec v;
for (IntVec::const_reverse_iterator itr = v.rbegin();
itr != v.rend(); ++itr)
;
itr != v.rend()这一行报错:
error: no match for 'operator!=' in 'itr != std::vector<_Tp, _Alloc>::rend()
[with _Tp = int, _Alloc = std::allocator<int>]()'|
STL迭代的代码写过许多, 突然出现这种错误有点不敢相信.
仔细看了一遍没有拼写错误, 又判断不出是什么错, 网上一查才知道原因.
应该是v.rend()结果为reverse_iterator, 所以operator!=无法比较两个不同的类型.
把v改为:
const IntVec v;
或者改比较式为:
itr != ((const IntVec &)v).rend();
都可以解决这个错误.
以前总是用reverse_iterator, 没碰到过这种错误. 以后还是仍用reverse_iterator算了.
const_reverse_iterator太长了点, 代码会不好看.
又试了试VC2005, 它不会报错.
参考:
http://topic.youkuaiyun.com/u/20070121/17/fd98d4b3-d3df-4061-9fbd-6b62b6946b7f.html?1131336059
本文探讨了使用const_reverse_iterator进行迭代时遇到的比较错误问题,并提供了两种解决方案:一是将变量声明为const,二是改变比较表达式的方式。此外,还讨论了不同编译器下此问题的表现。
1084

被折叠的 条评论
为什么被折叠?



