是否可以从头到尾迭代一个向量?
for (vector<my_class>::iterator i = my_vector.end();
i != my_vector.begin(); /* ?! */ ) {
}
或者只有这样的事情才有可能:
for (int i = my_vector.size() - 1; i >= 0; --i) {
}
原文由 user 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您可以使用 Boost 库,则 Boost.Range 提供 reverse
范围适配器,包括:
#include <boost/range/adaptor/reversed.hpp>
然后,结合 C++11 的 for
loop ,您可以编写以下内容:
for (auto& elem: boost::adaptors::reverse(my_vector)) {
// ...
}
由于此代码比使用迭代器对的代码更简洁,因此它可能更具可读性且不易出错,因为需要注意的细节较少。
原文由 JFMR 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
一种方法是:
rbegin()
/rend()
专为此目的而设计。 (是的,增加reverse_interator
将其向后移动。)Now, in theory, your method (using
begin()
/end()
&--i
) would work,std::vector
’s iterator being bidirectional, but请记住,end()
不是最后一个元素——它是最后一个元素之外的元素,所以你必须先递减,当你到达begin()
时你就完成了——但你仍然必须做你的处理。更新:在将
for()
while()
时,我显然过于激进了。 (重要的部分是--i
在开头。)