我正在尝试编写包含一些遗留代码的两遍算法。我想在特定容器中移动两次,一次按顺序,一次按相反顺序移动。显然,我的第一个想法是使用iterator
和reverse_iterator
,但奇怪的是我正在使用的容器类的设计者认为不适合为容器定义工作reverse_iterator
(reverse_iterators
此处不能像iterators
那样取消引用。我已经有一个需要reverse_iterator
的算法。
我的想法是在算法的第一部分使用第一个传递迭代器,并且当我将算法push_front
执行到新容器中时,然后遍历新容器。这会占用内存,这在我的应用程序中并不重要,但让我想知道:C ++中有reverse_iterators
的替代方案,或者我是否应该花时间仅使用forward {{1来重写我的算法}}?
答案 0 :(得分:4)
如果需要以相反的顺序迭代容器的元素,则不一定需要使用反向迭代器。
如果容器具有双向迭代器,那么您可以使用普通迭代器并使用--it
从end()
迭代到begin()
,而不是使用++it
从{{迭代} 1}}到begin()
。
由于这有点棘手,您可以使用end()
包装器将普通迭代器转换为反向迭代器(这基本上交换std::reverse_iterator
和++
并封装所需的技巧让这个工作)。
如果容器没有双向迭代器,那么这意味着不可能以相反的顺序迭代容器的元素,在这种情况下,您需要重写算法或使用不同的容器。
任何具有双向迭代器的容器,它应该提供反向迭代器功能;这是STL和C ++标准库“容器”概念的一部分。