12

unordered_map用 begin()、end() 和前向迭代器遍历 , 似乎很奇怪。

如果是这样,为什么它也没有 rbegin()、rend() 和双向迭代器?有什么技术原因吗?

4

2 回答 2

24

它是无序的,因此迭代发生的顺序是(或应该是)不重要的。

于 2013-01-29T23:22:14.197 回答
11

引用自The C++ Standard Library

反向迭代器通过在内部将递增运算符的调用转换为递减运算符的调用,让算法向后运行,反之亦然。所有具有双向迭代器或随机访问迭代器的容器(除了 forward_list 和所有关联容器之外的所有序列容器)都可以通过它们的成员函数 rbegin() 和 rend() 创建反向迭代器。从 C++11 开始,还提供了返回只读迭代器的相应成员函数 crbegin() 和 crend()。

对于 forward_lists 和无序容器,不提供向后迭代接口(rbegin()、rend() 等)。原因是实现只需要单链表来遍历元素。

于 2013-01-30T00:03:19.260 回答