当使用'ios :: sync_with_stdio(0)'来测试运行时的差异时,为什么我的输出会碎片化?

时间:2017-08-15 11:40:45

标签: c++ printf cin

  clock_t tStart = clock();
  ios::sync_with_stdio(0);
  cin.tie(0);
  for(int i=0;i<100000;++i) cout<<i;
  printf("\n\n\n\nTime taken: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
  cout<<endl;

使用此程序与cout在4.05秒运行,但即使在执行最后一行后输出一些数字。这是详细信息:

Time taken: 4.30s
99924999259992699927999289992999930999319993299933999349993599936999379993899939999409994199942999439994499945999469994799948999499995099951999529995399954999559995699957999589995999960999619996299963999649996599966999679996899969999709997199972999739997499975999769997799978999799998099981999829998399984999859998699987999889998999990999919999299993999949999599996999979999899999

使用printf程序按预期运行但非常慢(51秒)。我在打印时间之后使用endl来刷新输出缓冲区。这是什么原因?

1 个答案:

答案 0 :(得分:3)

嗯,您不再将C stdio(printf使用的)与C ++流I / O(std::cout使用)同步。这意味着它们具有不同的缓冲区,可以在不同的时间刷新(并写入控制台)。

尝试在std::cout << std::flush来电之前添加printf。或者更好的是,也可以使用std::cout作为最后一个输出。