- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试编写包含一些遗留代码的二次算法。我想两次穿过一个特定的容器,一次按顺序,一次按相反的顺序。显然,我的第一个想法是使用 iterator
和 reverse_iterator
,但奇怪的是,我正在使用的容器类的设计者认为不适合定义一个有效的 reverse_iterator
用于容器(reverse_iterators
不能像 iterators
那样取消引用)。我已经有了一个需要 reverse_iterator
的算法。
我的想法是在算法的第一部分使用第一遍迭代器,当我执行算法时 push_front
将项目放入新容器中,然后遍历新容器。这会占用内存,这在我的应用程序中并不重要,但让我想知道:在 C++ 中是否有比 reverse_iterators
更干净的替代品,或者我应该花时间只使用 forward 来修改我的算法迭代器
?
最佳答案
如果您需要以相反的顺序迭代容器的元素,则不一定需要使用反向迭代器。
如果容器有双向迭代器,那么可以使用普通迭代器,使用--it
从end()
迭代到begin()
而不是使用 ++it
从 begin()
迭代到 end()
。
由于这有点棘手,您可以使用 std::reverse_iterator
包装器将普通迭代器转换为反向迭代器(这基本上交换了 ++
和 --
并封装了让它工作所需的技巧)。
如果容器没有双向迭代器,那么这意味着不可能以相反的顺序迭代容器的元素,在这种情况下,您需要重写算法或使用不同的容器。
任何具有双向迭代器的容器,它应该提供反向迭代器功能;这是 STL 和 C++ 标准库“容器”概念的一部分。
关于C++ reverse_iterator 备选方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4231648/
注意:使用 jQuery 1.3.2(是的,我正在升级,但为此仍然需要 1.3.2) 寻找更好的方法来实现这一点 HTML 元素(这来自自定义 PHP 框架,更改起来非常麻烦): ... 1
我有一项服务可以提供大多数时间对用户可见的 UI。 当我遇到问题时,我正在尝试新的应用程序架构。 MyModelviewModel viewModel = ViewModelProviders.of(
在 C# 中,我有以下代码: string[] exampleStrings = Console.ReadLine().Split(' '); // C# int[] example
我是一名优秀的程序员,十分优秀!