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