为一个
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)
第二种方法非常差,因为strlen()每次调用它时都必须扫描整个数组,以搜索0字节.
你可以通过strlen在循环之前调用一次来改善它:
size_t len = strlen(array);
for (int n = 0; n < len; n++) { ... }
Run Code Online (Sandbox Code Playgroud)
除了for循环完成的扫描之外,这还需要扫描一次数组.
有些编译器可能能够检测到数组在循环期间没有发生变化,因此他们可以将您的strlen()版本优化到第二个.但我不认为依靠它是一个好主意.
但只是直接检查元素可以避免任何额外的扫描,因此它是最有效的.任何其他方法都不可能比这更好地进行优化.