自行實現C++ STL reverse_iterator
时间: 2024-11-05 08:04:47 浏览: 10
在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
```
阅读全文