`
yesjavame
  • 浏览: 654305 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

用const_reverse_iterator迭代的问题

阅读更多
用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.csdn.net/u/20070121/17/fd98d4b3-d3df-4061-9fbd-6b62b6946b7f.html?1131336059




分享到:
评论

相关推荐

    C++迭代器介绍(iterator、const_iterator、reverse_interator、const_reverse_interator)

    一、迭代器的特点 迭代器是一种智能指针,具有遍历复杂数据结构的能力 不同的容器有不一样的内部结构,因此会有一样的迭代器类型 迭代器定义后,并不属于某一实例容器对象,只要是属于该迭代器类型的容器类型都...

    自编MStirng(类似std::string)以及配套的4种iterators

    并且编写了配套的iterator、const_iterator、reverse_iterator、const_reverse_iterator。完全支持stl的各种算法,包括支持insert_iterator()转换。编写它的目的不是为了使用,而是为了熟悉stl算法及迭代器的原理。...

    effective stl stl 技巧

    条款26:尽量用iterator代替const_iterator,reverse_iterator和const_reverse_iterator 条款27:用distance和advance把const_iterator转化成iterator 条款28:了解如何通过reverse_iterator的base得到iterator ...

    effective stl 中文 pdf

    条款26: 尽量使用iterator代替const_iterator,reverse_iterator和const_reverse_iterator 条款27: 使用distance和advance把const_iterators转化成iterators 条款28: 了解如何通过reverse_iterator的base得到...

    Effictive STL CHM中文版

    条款26: 尽量使用iterator代替const_iterator,reverse_iterator和const_reverse_iterator 条款27: 使用distance和advance把const_iterators转化成iterators 条款28: 了解如何通过reverse_iterator的base得到...

    Effective STL(中文)

    :operator[]和map-insert之间仔细选择 条款25:熟悉非标准散列容器 迭代器 条款26:尽量用iterator代替const_iterator,reverse_iterator和const_reverse_iterator 条款27:用distance和advance把const_...

    STL源码剖析.pdg

    3.4.5 迭代器相应型别之五iterator_category 092 以advanced() 为例 093 消除 "单纯传递调用函数" 097 以distance() 为例 098 3.5 std::iterator class 的保证 099 3.6 iterator相关源码完整重列 101 3.7 sgi ...

    STL 源码剖析(侯捷先生译著)

    3.4.5 迭代器相应型别之五iterator_category 092 以advanced() 为例 093 消除 "单纯传递调用函数" 097 以distance() 为例 098 3.5 std::iterator class 的保证 099 3.6 iterator相关源码完整重列 101 3.7 SGI ...

    abstract-iterator:向abstract-nosql数据库添加search(iterator)功能

    抽象迭代器 将迭代器功能添加到数据库。 AbstractIterator(db [,options]) db:提供了的当前实例。 选项对象(注意:某些选项取决于Iterator的实现) db :与db参数相同 'next' :确保readStream返回键大于...

Global site tag (gtag.js) - Google Analytics