OJ 上同样的程序用 C 语言不超时,用 C++ 会超时,为什么?

#include<iostream> using namespace std; int main() { int a,b,n=0; while(cin…
关注者
32
被浏览
8,989

5 个回答

C++ 为了兼容 C,做了很多额外的工作,所以用 iostream 时有不少东西需要注意。

  • 为了支持 cout / cin 和 printf / scanf 混用,cout / cin 的每一次 IO 操作完成后都会将内部缓冲区和 printf / scanf 的缓冲区同步。如果不混用,通过 std::ios::sync_with_stdio(false); 关闭同步操作,可以显著提高速度。
  • 用 std::endl 代替 '\n' 会比较慢,因为 std::endl 的意思是「换行并清空缓冲区」。

我怎么记得我回答过类似的问题。因为printf/scanf直接调用操作系统的API,而cin/cout头文件中用一堆自己写的代码实现的。