交替使用cin/cout很慢
Alternating cin/cout is slow?
首先,我正在做std::ios_base::sync_with_stdio(false)
。我有以下代码段,从文本文件(<input.txt >output.txt
)中读取一百万个整数:
int tests;
cin >> tests;
for (int i = 0; i < tests; ++i) {
int number;
cin >> number;
cout << number << "n";
}
和
int tests;
cin >> tests;
vector<int> numbers(tests);
for (int i = 0; i < tests; ++i) {
cin >> numbers[i];
}
for (int i = 0; i < tests; ++i) {
cout << numbers[i] << "n";
}
当然,实际上,它们所做的不仅仅是打印相同的数字。问题是,第一个块需要大约 4 倍的时间(6.2 秒对 1.8 秒)。
使用 printf
/scanf
重写相同的代码在两种情况下都需要 3 秒。这背后的原因是什么?
请参阅std::basic_ios::tie
,特别是以下部分:
绑定流是与流缓冲区(
rdbuf()
)控制的序列同步的输出流,也就是说,在*this
上的任何输入/输出操作之前,在绑定流上调用flush()
。默认情况下,标准流
cin
、cerr
和clog
都绑定到cout
。同样,它们的宽对应物wcin
、wcerr
和wclog
也与wcout
联系在一起。
关键是要确保,在执行cout << "Enter something: "; cin >> something;
等操作的典型交互式程序中,在程序等待输入之前,提示实际上出现在屏幕上。
但在您的情况下,这些额外的flush()
调用会破坏流可能执行的任何缓冲,从而损害性能。
你可以用cin.tie(nullptr);
打破领带
相关文章:
- 为什么一个向量上的多线程操作很慢
- VS 2017 和 2019 运行 c++ 真的很慢
- Visual Studio 2015 中的调试速度很慢 -- 无法关闭页面堆?
- 加快一个长python代码的速度,因为只有一个块,所以速度很慢
- 当给出预先排序的输入时,为什么我的快速排序实现很慢
- std ::距离很慢,如何改善它
- C++编译每次都很慢,即使我不更改源代码
- 通过Visual Studio将小型结构逐值传递到非内部函数的速度很慢
- QWebView 用于在桌面应用程序中运行 javascript (D3) - 当 HTML 更改时重新加载速度很慢
- 在向QtChart添加一些点后,它变得很慢
- 与Python相比,Tensorflow C++ API很慢
- QT 5.7 串口读取速度很慢
- 在 Windows 上从文件填充多维矩阵很慢
- 为什么 std::unordered_map 很慢,我可以更有效地使用它来缓解这种情况吗?
- C OpenMP在矩阵矢量产品上的工作很慢
- SFML屏幕运动很慢
- SDL TILEMAP渲染速度很慢
- GLFW窗口glfwSwapBuffers()真的很慢吗
- 如果在调试配置中编译,C++ hash_map.clear() 会很慢
- 交替使用cin/cout很慢