stl 容器大都有reverse_iterator, 用法跟 iterator 一样。然而,可能很少有人考虑过它的实现。
首先, reverse_iterator 大都由 std::reverse_iterator 包装 iterator 生成,如此,同样的遍历循环,reverse_iterator 在每个循环中要调用两次 iterator.operator--, 一次是 reverse_iterator::operator++, 一次是 reverse_iterator::operator*, reverse_iterator 的关键代码大致如下:
如果不用 reverse_iterator, 如何反向遍历一个序列呢?
这样的反向遍历,每个循环只调用一次 BidirectIter::operator--, 比使用 reverse_iterator 的 for_each 更高效,除非编译器智能到可以消除那次多余的 operator--
然而这样的代码在极少数情况下也有问题,比如某个容器的 reverse_iterator 不是用 std::reverse_iterator 实现的,并且当正向 iterator 达到 end() 时就不能再调用 operator-- 回到上一个。febird::trbmap 就是这样一个例子,也许febird::trbmap在将来会修正这一点。
分享到:
相关推荐
逆序reverse_iterator打印 /* 编写一段程序,用普通迭代器顺序打印一个vector,再用逆序reverse_iterator打印一个它 */
36. reverse_iterator
逆序迭代器(`reverse_iterator`和`const_reverse_iterator`)提供了一种反向遍历容器的方式。`rbegin()`和`rend()`分别返回容器的末尾和首元素前一个位置的逆序迭代器。`const_reverse_iterator`与`const_iterator`...
ft_containers 42 ft_containers项目关于一些C ++ 98的STL容器 ... iterator_traits和一些type_traits改编 对和一些关系运算符模板 运行测试 clang++ main.cpp -std=c++98 -Wall -Wextra -Werror && ./a.out
并且编写了配套的iterator、const_iterator、reverse_iterator、const_reverse_iterator。完全支持stl的各种算法,包括支持insert_iterator()转换。编写它的目的不是为了使用,而是为了熟悉stl算法及迭代器的原理。...
- `reverse_iterator`:反向迭代器,从容器尾部向前遍历,相当于反向指针`T*`。 - `const_reverse_iterator`:反向常量迭代器,只读,相当于反向常量指针`const T*`。 2. **迭代器的关联性**: - 迭代器与特定的...
- `X::const_reverse_iterator X::rend() const`:获取指向容器第一个元素之前位置的反向常量迭代器。 - `X::size_type X::size() const`:返回容器当前元素数量。 - `X::size_type X::max_size() const`:返回容器...
条款26: 尽量使用iterator代替const_iterator,reverse_iterator和const_reverse_iterator 条款27: 使用distance和advance把const_iterators转化成iterators 条款28: 了解如何通过reverse_iterator的base得到...
4. Reverse Iterator (reverse_iterator.png): 解释了反向迭代器的概念,以及它如何指向字符串的最后一个有效字符的前一个位置。 5. Shell Sort (Shell_Sort.png): 展示了希尔排序的分组和预排序结果,说明了排序...
const_reverse_iterator<const_iterator, value_type, const_reference, const_pointer, difference_type> rbegin() const; reverse_iterator<iterator, value_type, reference, pointer, difference_type> rend()...
在`reverse_iterator`上使用`++`会移动到前一个元素,而`--`会移动到下一个元素。 8. **范围基础的for循环(Range-based for loop)**:C++11引入的新特性,简化了遍历容器元素的代码,如: ```cpp for (auto i :...
7. **reverse_iterator.h** 和 **reverse_node_iterator.h** - 这些头文件包含了逆向迭代器的实现,允许从树的末尾开始反向遍历。逆向迭代器是C++标准库的一部分,对于树结构,它可能提供了反向访问节点的能力,这...
- **random_access_iterator_tag**:随机访问迭代器标记。 #### 4.4 迭代器基类 - **input_iterator**:输入迭代器基类。 - **output_iterator**:输出迭代器基类。 - **forward_iterator**:前向迭代器基类。 - ...
:operator[]和map-insert之间仔细选择 条款25:熟悉非标准散列容器 迭代器 条款26:尽量用iterator代替const_iterator,reverse_iterator和const_reverse_iterator 条款27:用distance和advance把const_...
4. 常量反向迭代器:`container_name::const_reverse_iterator iterator_name;` 例如,定义一个正向迭代器: ```cpp vector<int>::iterator iter; ``` 迭代器可以用于读取和(如果非常量)修改元素,如`*iter`...
条款26建议优先使用iterator而非const_iterator、reverse_iterator等,以保持灵活性。条款28解释了如何通过reverse_iterator的base获取iterator,这对于反向遍历和修改容器很有帮助。条款30提醒程序员确保目标范围...
- 示例:对于`std::vector`,使用`erase(iterator)`通常比使用`erase(element)`更高效。 **标签:** - erase(iterator)、erase(element)、性能考虑 --- **标题:** 关注分配器的约定和限制 (Item 10) - **核心...
5. 适配器:适配器允许将已有的容器或迭代器转换为新的形式,如`stack`(栈)、`queue`(队列)、`priority_queue`(优先队列)等都是容器适配器,而`reverse_iterator`则是迭代器适配器。 在学习STL时,理解每个...