亲测,scanf和cin效率相差10倍.该如何处理
亲测,scanf和cin效率相差10倍.
我写了一个小程序,本来想试验最快的排序是哪种.
先写了个生成300万个随机数的程序,再写排序,把300万个数读进去.
本来是用的cin,但是发现慢得惊人,我还以为是自己的排序算法有问题,后来改成scanf输入,瞬间变快了.
cin只读入操作,就需要17秒,而scanf只需要1秒多.
求问这是为什么,有没有什么解决办法,
再问,标准流的scanf有没有eof之类的判断?貌似只有fscanf才有.
------解决思路----------------------
格式化输出效率比较高,但是写代码麻烦。
流输出操作效率稍低,但书写简便。
cout之所以效率低,是先把要输出的东西存入缓冲区,再输出,导致效率降低。
scanf("%d%d",&a,&b)!=EOF;
如果a和b都被成功读入,那么上面表达式的结果为2;
如果只有一个读入,那么上面表达式的结果为1;
如果a&&b都没有读入,那么上面表达式的结果为0(若a没有读入,则直接放弃b的读入);
如果遇到错误或者文件结尾,那么上面表达式的结果为EOF,对应的有符号数时-1;
如果遇到Crrl+Z,那么上面表达式的结果为EOF,对应的有符号数时-1;
------解决思路----------------------
取消 io 同步 sync_with_stdio(false);,再看看还慢吗。
我写了一个小程序,本来想试验最快的排序是哪种.
先写了个生成300万个随机数的程序,再写排序,把300万个数读进去.
本来是用的cin,但是发现慢得惊人,我还以为是自己的排序算法有问题,后来改成scanf输入,瞬间变快了.
cin只读入操作,就需要17秒,而scanf只需要1秒多.
求问这是为什么,有没有什么解决办法,
再问,标准流的scanf有没有eof之类的判断?貌似只有fscanf才有.
------解决思路----------------------
格式化输出效率比较高,但是写代码麻烦。
流输出操作效率稍低,但书写简便。
cout之所以效率低,是先把要输出的东西存入缓冲区,再输出,导致效率降低。
scanf("%d%d",&a,&b)!=EOF;
如果a和b都被成功读入,那么上面表达式的结果为2;
如果只有一个读入,那么上面表达式的结果为1;
如果a&&b都没有读入,那么上面表达式的结果为0(若a没有读入,则直接放弃b的读入);
如果遇到错误或者文件结尾,那么上面表达式的结果为EOF,对应的有符号数时-1;
如果遇到Crrl+Z,那么上面表达式的结果为EOF,对应的有符号数时-1;
------解决思路----------------------
取消 io 同步 sync_with_stdio(false);,再看看还慢吗。