c++-reverse_iterator
C++反向迭代器
反向迭代器是C++标准库提供的一种适配器,它允许我们以相反的顺序遍历容器,反向迭代器是正向迭代器的封装。
迭代器可以分为两类:
-
方向性质:
-
单向迭代器(Forward Iterator)
-
双向迭代器(Bidirectional Iterator)
-
随机访问迭代器(Random Access Iterator)
-
输入迭代器(Input Iterator)
-
输出迭代器(Output Iterator)
-
-
遍历方向:
-
正向迭代器(iterator)
-
反向迭代器(reverse_iterator)
-
特性 | 输入迭代器 | 输出迭代器 | 单向迭代器 | 双向迭代器 | 随机迭代器 |
---|---|---|---|---|---|
读(*iter ) | ✅ | ✅ | ✅ | ✅ | |
写(*iter = ) | ✅ | ✅ | ✅ | ✅ | |
++ | ✅ | ✅ | ✅ | ✅ | ✅ |
– | ✅ | ✅ | |||
+ | ✅ | ||||
- | ✅ |
-
常见的单向迭代器:
forward_list
、unordered_map
、unordered_set
-
常见的双向迭代器:
list
、map
、set
-
常见的随机迭代器:
vector
、string
、deque
支持反向迭代器,普通迭代器必须支持 ++
、--
运算符操作。
代码实现
// reverse_iterator.hpp
#pragma oncenamespace simulate_reverse_iterator {template<typename Iterator , typename Ref , typename Ptr>struct reverse_iterator {typedef reverse_iterator<Iterator , Ref , Ptr> self;reverse_iterator(Iterator iter) :iterator(iter) {}Ref operator*() {self temp(iterator);return *--temp;}Ptr operator->() {return &(operator*());}self& operator++() {return --iterator;}self& operator--() {return ++iterator;}bool operator==(const self& s) {return iterator == s.iterator;}bool operator!=(const self& s) {return iterator != s.iterator;}Iterator iterator;};
}
注意事项
-
反向迭代器的
operator*
返回的是前一个位置的元素,这是为了保持与正向迭代器相同的半开区间语义。-
rbegin()
对应正向迭代器的end()
-
rend()
对应正向迭代器的begin()
-
-
反向迭代器的
++
操作是对应正向迭代器的--
操作,--
操作时对应正向迭代器的++
操作。