c++ - 如何在两个 for 循环中的第一个之后摆脱初始化?
问题描述
我有一个当前形式为的 for 循环
for (i=0; i<N; i++) {
y = 0.;
for (j=0; j<N; j++)
y += ...
}
我想把它改写为
for (i=0; i<N; i++) {
for (j=0; j<N; j++)
y += ...
}
其中 y 在某个先前点被初始化,使得两个 for 循环被折叠。有没有办法做到这一点?这是以下 OpenMP 教程第 16.4 节的练习
解决方案
这与您链接到的代码不同。原来有y
索引,即它是一个数组:
for (i=0; i<N; i++) {
y[i] = 0.;
for (j=0; j<N; j++)
y[i] += ...
}
这可以重写为:
for (i=0; i<N; i++)
y[i] = 0.;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
y[i] += ...
}
在你的情况下,y
是标量。外循环的每次迭代都会在内循环之前将其值重置为 0。如果内部循环中没有副作用,则只有外部循环的最后一次迭代才重要,您可以简单地摆脱它:
i = N-1;
y = 0.;
for (j=0; j<N; j++)
y += ...
推荐阅读
- javascript - Three.js - 自定义网格上的奇怪线条
- perl - 如何在 perl 单行中回到文件的开头?
- api - Quip 是否有文档搜索 API?
- tensorflow - 加载/应用 TFX Beam 变换图时 TFX 变换等级不匹配
- marklogic - MarkLogic - 自定义休息 GET REST 服务的性能变化
- angular - 使用 URL 中的参数发送 Post 请求
- robotframework - 预计至少有 1 个参数,得到 0
- kotlin - 对位和卷曲对位中的 Kotlin 类属性
- python - Python jsonschema 未标记日期时间错误
- javascript - 为什么输出 2(而不是未定义)?