gpt4 book ai didi

C++ 11:使用单个范围循环有效地迭代矩阵?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:59 25 4
gpt4 key购买 nike

(对于具体的编译器/平台上下文,请在 x86_64 上使用 GCC 4.7 和 Ubuntu 12.04)

给定一些函数f:

void f(int x, int y);

int nx = ...;
int ny = ...;

从 (0,0) 到 (nx,ny) 遍历每个值 (x,y) 的一种方法是:

for (int x = 0; x < nx; x++)
for (int y = 0; y < ny; y++)
f(x,y);

让它编译成一些生成的代码 Q1。

我们将编写一个函数 g 这样:

for (auto it : g(Z))
f(it.x, it.y);

编译为代码 Q2。

是否可以编写 g 使得 Q2 与 Q1 一样有效?如果是,如何?如果不是,我们能得到的最接近的是什么?

如果有帮助,您可以将 auto 更改为 auto& 或 auto&&。

如果有帮助,您也可以将 it.x 更改为 it.x(),将 it.y 更改为 it.y()。

(回想一下,基于范围的 for 的扩展只是您选择的类似迭代器的类型:C++11: The range-based for statement: "range-init" lifetime?)

最佳答案

Is it possible to write g such that Q2 is as efficient as Q1? If yes, how? If not, what is the closest we can get?

当然可以,您只需要定义以与 for 循环相同的方式递增的迭代器。从我的头顶:

class matrix_iterator
{
public:
...

matrix_iterator& operator++()
{
if( ++y >= ny )
{
++x;
y = 0;
}

return *this;
}

private:
int nx, ny;
int x, y;
};

关于C++ 11:使用单个范围循环有效地迭代矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10826763/

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