我经常发现自己在编写这些代码片段,特别是当我必须在二维数组中执行某些操作时。
循环是一样的,只是里面的操作不同,最重要的是,最后一组的操作依赖于第一组。
我主要关心的是:对于较大的 n,m 值是否有更高效的代码?
for ( int y = 0 ; y < m ; ++y ) {
for ( int x = 0 ; x < n ; ++x ) {
if ( v[x][y] == z ) a = true;
}
}
for ( int y = 0 ; y < m ; ++y ) {
for ( int x = 0 ; x < n ; ++x ) {
if ( a == true ) do_something( v[x][y] );
}
}
提前致谢
最佳答案
在您描述的一般情况下,答案可能是“否”- 您暗示第二次查看的操作依赖于完成第一个循环,因此您必须这样做。
但是,在您列出的特定情况下,有两个简单的优化:
- 在第一个循环中快速失败:一旦
a
设置为true
,就不需要进一步循环。 - 将
if ( a == true )
移到第二个循环之外,这样它只计算一次,如果它为 false,则跳过整个循环。<
关于c++ - 对于这两组连续的相同循环,是否有更有效的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12515073/