C++ C++;反向迭代器替代方案

C++ C++;反向迭代器替代方案,c++,algorithm,stl,iterator,C++,Algorithm,Stl,Iterator,我正在尝试编写一个包含一些遗留代码的双过程算法。我想在一个特定的容器中移动两次,一次按顺序,一次按相反的顺序。显然,我的第一个想法是使用迭代器和反向迭代器,但奇怪的是,我使用的容器类的设计者认为不适合为容器定义一个工作的反向迭代器(反向迭代器这里不能像迭代器那样被取消引用)。我已经有了一个需要反向迭代器的算法 我的想法是对算法的第一部分使用第一次遍历迭代器,当我执行算法时,push_front将项目放入一个新容器中,然后遍历新容器。这将占用内存,这在我的应用程序中并不重要,但我想知道:C++中有

我正在尝试编写一个包含一些遗留代码的双过程算法。我想在一个特定的容器中移动两次,一次按顺序,一次按相反的顺序。显然,我的第一个想法是使用
迭代器
反向迭代器
,但奇怪的是,我使用的容器类的设计者认为不适合为容器定义一个工作的
反向迭代器
反向迭代器
这里不能像
迭代器
那样被取消引用)。我已经有了一个需要
反向迭代器的算法


我的想法是对算法的第一部分使用第一次遍历迭代器,当我执行算法时,
push_front
将项目放入一个新容器中,然后遍历新容器。这将占用内存,这在我的应用程序中并不重要,但我想知道:C++中有没有更干净的替代代码< > ReaveSyter迭代器< /C>?或者我需要花时间来重新使用我的算法,只使用前向<代码>迭代器< /C> > /p> < p>如果需要以相反顺序迭代容器的元素,您不一定需要使用反向迭代器

如果容器具有双向迭代器,则可以使用普通迭代器,并使用
--it
end()
begin()
进行迭代,而不是使用
++it
begin()
end()
进行迭代

由于这有点棘手,您可以使用
std::reverse_迭代器
包装器将普通迭代器转换为反向迭代器(这基本上交换了
++
--
,并封装了实现此功能所需的技巧)

如果容器没有双向迭代器,那么这意味着不可能以相反的顺序迭代容器的元素,在这种情况下,您需要重写算法或使用不同的容器


任何具有双向迭代器的容器,都应该提供反向迭代器功能;这是STL和C++标准库“容器”概念的一部分。

谢谢,看起来迭代器是双向的。该类实际上使用
std::reverse_iterator
来实现其
reverse_iterator
,但是当我尝试使用它并取消引用它时,我会得到一个编译器错误。@Zeke:您必须发布您正在使用的代码和确切的编译器错误;否则,很难帮上忙(@James:很公平。我想我的
--it
想法可行,但是你对
for
循环条件有什么建议吗?我想用
for(--it;it!=end;--it)
但是我会错过最后一项。我可以修改条件吗,还是需要在循环体结束后包含循环代码?@James:在上面的代码中,
它设置为
。end()
并且
end
设置为
。begin()
@Zeke:std::reverse_iterator
模板有助于解决这一棘手的问题。:-)无论如何,您需要
for(auto-loop_it=end();loop_it!=begin()--loop_it){auto-it=loop_it;--it;}
有效地将迭代器从
end()
转到
begin()
但在循环内部,使用迭代器指向的元素之前的元素;如果你把这个方法写在纸上,它会比我在这里的注释中解释的更有意义:-P(用迭代器类型替换
auto