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

标签 c++

对于一个

char array [10];
cin.getline(array, 10);

哪一个是最好的选择?

for(int n = 0; array[n] != '\0'; n++) {...}

for(int n = 0; n < strlen(array); n++) {...}

最佳答案

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

您可以通过在循环之前调用一次 strlen 来稍微改进它:

size_t len = strlen(array);
for (int n = 0; n < len; n++) { ... }

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

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

但直接检查元素可以避免任何额外的扫描,因此效率最高。不可能有任何其他方法可以比这更好地优化。

关于c++ - "array[n] != '\0'"比 "n < strlen(array)"好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33404929/

相关文章:

c++ - 具有抽象参数的抽象工厂?

c++ - SQLite 绑定(bind)数字数据类型

c++ - cmd 中的信息闪烁并且更新非常快

c++ - C++ 中 RUBY 的 GEMS 相当于什么?

c++ - 实例化点和名称绑定(bind)

c++ - 预编译头 C++ 无法重命名 pch.h

c++ - 如何根据给定的字符长度拆分 QString?

c++ - 在实现和调用时可以复制函数参数名称吗?

c++ - 使用 ALSA 库的音频捕获 - snd_pcm_open => No such file or directory

c++ - 数组索引错误