`
yesjavame
  • 浏览: 687937 次
  • 性别: 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)

    使用迭代器时,通常需要声明迭代器类型,如`string::iterator`,然后通过`begin()`和`end()`获取容器的首尾迭代器,用`for`循环遍历元素。解引用迭代器(`*i`)可以获得元素的引用,而`-&gt;`操作符可以访问元素的成员...

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

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

    C++中string的详解

    const_reverse_iterator&lt;const_iterator, value_type, const_reference, const_pointer, difference_type&gt; rbegin() const; reverse_iterator&lt;iterator, value_type, reference, pointer, difference_type&gt; rend()...

    有效使用Iterator

    - `const_reverse_iterator`:反向常量迭代器,只读,相当于反向常量指针`const T*`。 2. **迭代器的关联性**: - 迭代器与特定的容器实例相关联,不能跨容器使用。 - 不同类型的迭代器(例如,`iterator`与`...

    第6次课第4章STL1(vector-set-map-pair).pptx

    4. 常量反向迭代器:`container_name::const_reverse_iterator iterator_name;` 例如,定义一个正向迭代器: ```cpp vector&lt;int&gt;::iterator iter; ``` 迭代器可以用于读取和(如果非常量)修改元素,如`*iter`...

    STL quick reference

    - `X::const_reverse_iterator X::rend() const`:获取指向容器第一个元素之前位置的反向常量迭代器。 - `X::size_type X::size() const`:返回容器当前元素数量。 - `X::size_type X::max_size() const`:返回容器...

    C++STLQuickReference

    - `X::reverse_iterator`和`X::const_reverse_iterator`:反向迭代器和常量反向迭代器类型。 - `X::difference_type`:迭代器差值的类型。 - `X::size_type`:容器大小的类型。 **2.2.2 Members & Operators** - ...

    使用stl 注意细节

    * 尽量使用 iterator 代替 const_iterator、reverse_iterator 和 const_reverse_iterator。 * 使用 distance 和 advance 把 const_iterators 转化成 iterators。 8. 避免对 set 和 multiset 的键值进行修改 在使用...

    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容器 算法 函数表

    5. `iterator`、`const_iterator`、`reverse_iterator`和`const_reverse_iterator`: 迭代器类型,分别用于正向和反向遍历容器中的元素。 6. `begin()`和`end()`: 返回指向容器首尾元素的迭代器。 7. `rbegin()`和`...

    C++_STL之set容器使用方法

    - **reverse_iterator** 和 **const_reverse_iterator**:分别提供正向和反向遍历的迭代器。 #### 五、容量相关函数 `set`容器提供了多个与容量相关的函数: - **empty()**:判断容器是否为空。 - **size()**:返回...

    C++-中的multiset容器

    - **const_reverse_iterator**:提供一个双向逆向迭代器,可以在`multiset`容器中读取任意一个常量元素。 - **difference_type**:提供`multiset`容器中由迭代器所指定的范围内元素的个数。 - **iterator**:提供一...

    c++ 标准库

    - `const_reverse_iterator`:用于反向遍历容器const元素的迭代器版本。 - `size_type`:能够表示容器中元素数量的类型,通常为`size_t`(来自`&lt;cstddef&gt;`头文件)。 - `difference_type`:能够表示容器中两个迭代器...

    C++之Boost::array用法简介

    ` 和 `const_reverse_iterator rbegin() const;`:返回反向迭代器,从数组末尾开始。 - `reverse_iterator rend();` 和 `const_reverse_iterator rend() const;`:返回反向迭代器,指向反向迭代的起点。 3. 容量...

    Effective STL

    优先使用`iterator`而非`const_iterator`、`reverse_iterator`和`const_reverse_iterator`(Prefer iterator to const_iterator, reverse_iterator, and const_reverse_iterator)** - **概述**:在可能的情况下...

Global site tag (gtag.js) - Google Analytics