用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++标准模板库(STL)中,`reverse_iterator`是一个非常有用的迭代器,它允许我们从容器的末尾开始遍历。如果你想自定义一个类似的功能,可以创建一个简单的类,模仿`std::reverse_iterator`的行为。下面是一个基本的实现示例: ```cpp template <typename T> class CustomReverseIterator { public: // 初始化,通常需要一个指向容器元素的指针和当前索引 explicit CustomReverseIterator(T* data = nullptr, size_t index = 0) : data_(data), current_index_(index) {} // 返回值类型,模拟std::reverse_iterator<T&> using iterator_category = std::random_access_iterator_tag; using value_type = T; using difference_type = ptrdiff_t; using pointer = T*; using reference = T&; // 前向移动 CustomReverseIterator& operator++() { if (current_index_ > 0) { --current_index_; } return *this; } // 后向移动 CustomReverseIterator& operator--() { if (current_index_ < data_->size()) { ++current_index_; } return *this; } // 获取指向的元素 T& operator*() const { return *(data_ - current_index_); } T* operator->() const { return &operator*(); } // 判断是否到达开头 bool operator==(const CustomReverseIterator& other) const { return data_ == other.data_ && current_index_ == other.current_index_; } bool operator!=(const CustomReverseIterator& other) const { return !(*this == other); } private: T* data_; // 存储数据的指针 size_t current_index_; // 当前索引,从末尾开始计数 }; ``` 这个自定义的`CustomReverseIterator`类假设你有一个包含元素的动态数组或其他支持随机访问的容器。你可以像操作普通迭代器一样使用它,例如: ```cpp int arr[] = {1, 2, 3, 4, 5}; CustomReverseIterator<int> it(arr, arr.size()); while (it != CustomReverseIterator<int>()) { std::cout << *it-- << " "; } // 输出:5 4 3 2 1 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值