gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 22:12:36 24 4
gpt4 key购买 nike

假设我有一个嵌套 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com