不太确定如何命名它,但我希望它有意义。我想向前和向后迭代一个数组 x 次。一种选择是将数组的大小加倍,然后根据模长度进行迭代,从而以循环方式进行迭代。假设一个非常大的序列,这可能会消耗大量不必要的内存。另一种选择是:
while(++i <= iterations) {
for(j = 0; j < arrayLength; j++){
//do something
}
for(j = arrayLength - 1; j >= 0; j--){
//do something
}
}
虽然这感觉很丑陋 - 我有点重复自己,只是切换++/--。我正在为此寻找一种优雅的编码方法。语言应该是 C 或 C++。非常清楚,我正在寻找一种不同的算法。谢谢。
最佳答案
boost::adaptors::reverse
可以在这里派上用场:
#include <boost/range/adaptors.hpp>
while (i++ < iterations) {
for (auto i : array) /* do something */ ;
for (auto i : boost::adaptors::reverse(array)) /* do something */ ;
}
在 C++14 中,我们还有 std::rbegin
and std::rend
, 所以你可以这样写:
auto rb = std::rbegin(array);
auto re = std::rend(array);
while (rb != re) {
// do something
++rb;
}
也就是说,如果您使用的是普通数组。大多数标准容器已经带有 rbegin()
和 rend()
方法,它们为您提供反向迭代器。
关于c++ - 对称迭代数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16904708/