Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ (c+;+;)使用相同的代码以4种不同的方式遍历数组_C++_Arrays - Fatal编程技术网

C++ (c+;+;)使用相同的代码以4种不同的方式遍历数组

C++ (c+;+;)使用相同的代码以4种不同的方式遍历数组,c++,arrays,C++,Arrays,我在二维数组上做一些计算,需要用4种不同的方式遍历数组 for(int i=0; i < array_size; i++) { for(int j=0; j < array_size; j++) { #do some computation around [i][j] element } } for(int i = array_size - 1; i >= 0; i--) { for(int j=0; j < array_size; j++

我在二维数组上做一些计算,需要用4种不同的方式遍历数组

for(int i=0; i < array_size; i++) {
   for(int j=0; j < array_size; j++) {
      #do some computation around [i][j] element
   }
}

for(int i = array_size - 1; i >= 0; i--) {
   for(int j=0; j < array_size; j++) {
      #do the same computation around [i][j] element
   }
}


for(int i=0; i < array_size; i++) {
   for(int j=array_size - 1; j >= 0; j--) {
      #do the same computation around [i][j] element
   }
}



for(int i = array_size - 1; i >=0; i--) {
   for(int j = array_size - 1; j >= 0; j--) {
      #do the same computation around [i][j] element
   }
}
for(int i=0;i=0;i--){
对于(int j=0;j=0;j--){
#对[i][j]元素进行同样的计算
}
}
对于(int i=array_size-1;i>=0;i--){
对于(int j=array_size-1;j>=0;j--){
#对[i][j]元素进行同样的计算
}
}
问题是,首先,计算的代码很长,将来可能会更改。其次,阵列非常庞大,因此性能也是一个问题


我一直在想,是否有任何方法可以避免代码重复并保持性能。因为将代码提取到函数中可能会降低性能

如果使用内联函数,编译器很可能会为您进行内联,从而得到您想要的结果

inline void work(int i, int j) { ... }


如果您想更科学地了解这一点,并且这个函数需要花费大量的时间,那么我建议您投资一个分析器。在开源方面,有些人会推荐。在专有方面,一些人(包括我自己)会建议。

“将代码提取到函数中可能会降低性能”,首先:这就是内联的作用。第二:现在的编译器非常聪明,不要过早地优化,也不要不定时地优化。欢迎使用堆栈溢出。请尽快阅读这一页。编程语言中有一个叫做“函数”的小工具。听起来循环的主体需要是一个函数,它将
数组[i][j]
元素作为其参数之一。它严重降低性能的机会是有限的。你必须证明这一点。代码越复杂,提取到函数中会影响性能的可能性就越小。@JonathanLeffler他显然知道函数,但拒绝使用它们,因为他害怕性能下降。大多数评论者都忽略了这一点:
关于[i][j]元素
。顺序很重要,同意莎莎的回答。在ReleaseAssembly代码中验证函数是否真的是内联的。如果不是-使用宏。甚至包括代码片段。当性能很重要时,我们需要忘记许多编程风格规则。请注意,如果
work
很长,只需像上面那样给出
inline
可能不会内联调用。编译器将决定内联是否合适。对于gcc,您可以尝试
inlinevoidwork(…)\uuuuuu属性(总是inline))
@JoshG79如果
工作
很长,则函数调用开销不太可能是一个问题。