在 C 程序中使用 scanf() 比 cin 更快吗?
声称在读取输入时使用 scanf() 比 cin 更快C 中的说法有一定道理。这里有一个解释:
速度基准测试
为了验证这一说法,创建了一个简单的测试程序来从标准输入读取数字列表并计算它们的异或(异或)运算。测试了程序的两个版本:一个使用 iostream(cin 和 cout),另一个使用 stdio(scanf 和 printf)。
当使用大量输入(33,280,276 个随机数)进行测试时,scanf 版本明显优于 iostream 版本,在 6.4 秒内完成任务,而 24.3 秒。
速度差异的原因
速度差异是由于 iostream 与 C 的 I 同步而产生的/O 函数。使用 iostream 的输入和输出操作与 C I/O 函数(例如 getchar()、putchar())同步,这会带来额外的开销。
使用 ios::sync_with_stdio(false) 进行优化
为了解决这个同步问题,可以使用 std::ios::sync_with_stdio(false) 来禁用 iostream 和 stdio 之间的同步。这使得 iostream 能够更高效地运行,而无需同步的开销。
禁用同步后,iostream 版本的性能显着提高,在 5.5 秒内完成任务,比 scanf 版本更快。
结论
根据基准测试结果,在 C 程序中读取大量输入时,使用 scanf() 确实比使用 cin 更快。然而,通过 std::ios::sync_with_stdio(false) 的优化,iostream 的性能可能会优于 scanf(),并且应该被视为输入和输出操作的首选。
以上是C 中的 scanf() 真的比 cin 快吗?我们如何优化 cin 的性能?的详细内容。更多信息请关注PHP中文网其他相关文章!