"array [n]!='\ 0'"比"n <strlen(array)"更好吗?

Emm*_*ess 1 c++

为一个

char array [10];
cin.getline(array, 10);
Run Code Online (Sandbox Code Playgroud)

哪一个是最好的选择?

for(int n = 0; array[n] != '\0'; n++) {...}
Run Code Online (Sandbox Code Playgroud)

要么

for(int n = 0; n < strlen(array); n++) {...}
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 6

第二种方法非常差,因为strlen()每次调用它时都必须扫描整个数组,以搜索0字节.

你可以通过strlen在循环之前调用一次来改善它:

size_t len = strlen(array);
for (int n = 0; n < len; n++) { ... }
Run Code Online (Sandbox Code Playgroud)

除了for循环完成的扫描之外,这还需要扫描一次数组.

有些编译器可能能够检测到数组在循环期间没有发生变化,因此他们可以将您的strlen()版本优化到第二个.但我不认为依靠它是一个好主意.

但只是直接检查元素可以避免任何额外的扫描,因此它是最有效的.任何其他方法都不可能比这更好地进行优化.