我想比较使用Python和C++从stdin读取字符串的读取行,并且看到我的C++代码运行速度比等效的Python代码慢一个数量级,这让我很震惊.由于我的C++生锈了,我还不是专家Pythonista,请告诉我,如果我做错了什么或者我是否误解了什么.
(TLDR回答:包括声明:cin.sync_with_stdio(false)或者只是fgets改用.
TLDR结果:一直向下滚动到我的问题的底部并查看表格.)
C++代码:
#include <iostream>
#include <time.h>
using namespace std;
int main() {
string input_line;
long line_count = 0;
time_t start = time(NULL);
int sec;
int lps;
while (cin) {
getline(cin, input_line);
if (!cin.eof())
line_count++;
};
sec = (int) time(NULL) - start;
cerr << "Read " << line_count << " lines in " << sec << " seconds.";
if (sec > 0) {
lps = line_count / sec;
cerr << " LPS: " << lps …Run Code Online (Sandbox Code Playgroud) 大多数学习C的C++用户都喜欢使用printf/ scanf系列函数,即使他们使用C++进行编码也是如此.
虽然我承认我发现接口方式更好(特别是类似POSIX的格式和本地化),但似乎压倒性的关注是性能.
看看这个问题:
似乎最好的答案是使用fscanf并且C++的ifstream速度始终慢2-3倍.
我认为如果我们能够编译一个"技巧"存储库以提高IOStream的性能,哪些有效,哪些无效,我会觉得很棒.
要考虑的要点
rdbuf()->pubsetbuf(buffer, size))std::ios_base::sync_with_stdio)当然,欢迎其他方法.
注意:提到了Dietmar Kuhl的"新"实现,但我无法找到有关它的许多细节.以前的引用似乎是死链接.