首页  >  文章  >  后端开发  >  scanf() 在 C 输入速度方面总是优于 iostream 吗?

scanf() 在 C 输入速度方面总是优于 iostream 吗?

Patricia Arquette
Patricia Arquette原创
2024-11-19 11:13:02357浏览

Does scanf() Always Outperform iostream in C   Input Speed?

scanf() 在 C 性能中能否超越 iostream?

scanf() 提供比 C 中 cin 更快的输入处理的概念已经引发程序员之间的争论。本文深入研究了这些方法之间的性能比较,检查了证据并提供了详细的解释。

性能测试

为了评估性能差异,一个简单的程序是创建从标准输入读取数字列表并对它们执行异或运算。 cin 和 scanf() 均在单独的实现中使用:

  • cin 版本:
#include <iostream>

int main() {
  int parity = 0;
  int x;

  while (std::cin >> x)
    parity ^= x;
  std::cout << parity << std::endl;

  return 0;
}
  • scanf版本:
#include <stdio.h>

int main() {
  int parity = 0;
  int x;

  while (1 == scanf("%d", &x))
    parity ^= x;
  printf("%d\n", parity);

  return 0;
}

结果

使用包含超过 3300 万个随机数的文件,测量执行时间:

  • cin 版本:24.3秒
  • scanf 版本:6.4 秒

优化注意事项

更改编译器优化设置对结果的影响很小。

增强的 iostream性能

发现性能差距部分是由于 iostream 与 C I/O 函数保持同步造成的。通过使用命令 std::ios::sync_with_stdio(false) 禁用此同步,iostream 的性能显着提高:

#include <iostream>

int main() {
  int parity = 0;
  int x;

  std::ios::sync_with_stdio(false);

  while (std::cin >> x)
    parity ^= x;
  std::cout << parity << std::endl;

  return 0;
}

新结果

禁用 iostream 同步后:

  • cin 同步版本:21.9秒
  • scanf 版本:6.8 秒
  • 没有同步的 cin 版本:5.5 秒

结论

证据表明对于 C 中的原始输入处理, scanf() 确实比 cin 更快。但是,如果禁用 iostream 的同步,iostream 将成为最佳选择,其性能优于 scanf() 和优化的 cin 版本。

因此,虽然 scanf() 在特定场景下可能更快,但 iostream 提供了更好的同步控制以及更广泛的功能。当速度至关重要时,建议禁用 iostream 同步。

以上是scanf() 在 C 输入速度方面总是优于 iostream 吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn