c - 内循环索引不等于外循环索引时的嵌套循环
问题描述
当内部循环的索引等于外部循环索引时,嵌套循环逻辑跳过内部循环。
在内部循环中使用了 if 语句,效果如下:
for (i=0;i<N;i++)
for (j=0;j<N;j++)
if (j!=i)
... some code
我相信这给了我预期的结果,但有没有一种我可能不知道的 CPU 消耗较少的方法?
解决方案
如果您可以假设N <= i
,您可以将内部循环拆分为 2 个单独for
的循环以减少测试次数:
for (i = 0; i < N; i++) {
for (j = 0; j < i; j++) {
... some code
}
/* here we have j == i, skip this one */
j++;
for (; j < N; j++) {
... same code
}
}
这会导致更多的代码,但对j
. 但是请注意,如果N
是一个常量,编译器可能会更有效地展开原始内部循环。仔细的基准测试是确定该解决方案是否值得为您的问题、编译器和架构付出努力的唯一方法。
为了完整起见,这段代码可以简化为:
for (i = 0; i < N; i++) {
for (j = 0; j < i; j++) {
... some code
}
/* here we have j == i, skip this one */
while (++j < N) {
... same code
}
}
推荐阅读
- c++ - vector.resize() 中的错误分配
- python - 您建议使用哪种分类模型来预测信用评分?
- google-app-engine - 如何将我的域映射到 Google Cloud Shell 的预览服务器 (...-dot-devshell.appspot.com)
- r - 根据 2 个条件将一列拆分为多列
- javascript - JavaScript Datatable.JS / PHP MySQLi 排序问题
- architecture - Flutter:作用域模型以及如何决定在文件中放入什么和多少
- api - 响应谱 - 如何从网站获取数据
- excel - 复制最后一个弹出窗口的内容
- android - 如何修复布局?
- razor - 寻找在没有任何 Web 服务器的控制台应用程序中呈现 Razor cshtml 页面的最简单选项