c++ - 对称迭代数组

标签 c++ c arrays iteration

不太确定如何命名它,但我希望它有意义。我想向前和向后迭代一个数组 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/

相关文章:

c++ - 从文件中部分填充数组

c - 在 BST 中如何将数组保留为值?

c - K&R 练习 1-19 重新制作一个文件作为参数读取

C++,函数将数组作为字符串返回

javascript - JS多维数组排序列表

c - 列出整数并放入数组中

c++ - #if/#endif 预处理指令

c++ - boost::container::vector 无法使用 C++03 编译器进行编译

c++ - 从文件中的特定位置读取 C++

c - 在 C 中打印文件中的 int 数组