c++ - 将多个 for 循环组合成单个迭代器

标签 c++ loops c++14

假设我有一个嵌套 for 循环,例如

for (int x = xstart; x < xend; x++){
    for (int y = ystart; y < yend; y++){
        for (int z = zstart; z < zend; z++){
            function_doing_stuff(std::make_tuple(x, y, z));
        }
    }
}

想把它改造成

MyRange range(xstart,xend,ystart,yend, zstart,zend);
for (auto point : range){
    function_doing_stuff(point);
}

如何编写 MyRange 类,使其与嵌套的 for 循环一样高效? 这样做的动机是能够使用标准算法(例如转换、累积​​等),并创建很大程度上与维度无关的代码。

通过使用迭代器,可以轻松创建在 1d、2d 或 3d 点范围内操作的模板化函数。

代码库目前是 C++14。

编辑:

写出清晰的问题很难。我会尽力澄清。 我的问题不是我可以写一个迭代器。相反,问题在于性能:是否可以创建一个与嵌套 for 循环一样快的迭代器?

最佳答案

range/v3 ,你可以这样做

auto xs = ranges::view::iota(xstart, xend);
auto ys = ranges::view::iota(ystart, yend);
auto zs = ranges::view::iota(zstart, zend);
for (const auto& point : ranges::view::cartesian_product(xs, ys, zs)){
    function_doing_stuff(point);
}

关于c++ - 将多个 for 循环组合成单个迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52815896/

相关文章:

C++:ofstream 类将文件保存到哪里?

C++ 段错误 : Passing a string to a node in a linked list

javascript - 循环中的异步函数 - 使变量在内部函数中可用

java - 如何完成这部分代码?

c++ - 我可以在没有结构实例的情况下使用 `hana::keys` 吗?

c++ - 为什么这个模板 constexpr 函数不能在 gcc 上编译但在 clang 上运行良好?

C++:如何在 iOS 中已有的 MFC 应用程序中重用加密的 Sqlite 数据库

c++ - 调整 Eigen::Ref 大小的解决方法

c - 为什么这样会产生无限循环(C,While Loop)

c++ - c++中存储的非标准函数的声明在哪里?