以前知道使用cout<<endl换行会刷新缓冲区,但是从来也没在意过这个问题,早上起来翻书看到关于这方面的东西就来做了个测试,不做不知道,一测下一跳啊- -!
测试代码:
/** 吉林大学 Jilin U Author: sinianluoye (JLU_LiChuang) Date: 2015-3 Usage: **/ #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #define ll long long #define eps 1e-8 #define ms(x,y) (memset(x,y,sizeof(x))) #define fr(i,x,y) for(int i=x;i<=y;i++) #define sqr(x) ((x)*(x)) #include <ctime> using namespace std; const int maxn=1e7+10; int main() { for(int cas=0;cas<10;cas++) { int a=clock(); freopen("in","w",stdout); for(int i=0;i<maxn;i++) cout<<"\n"; int b=clock(); freopen("CON","w",stdout); printf("used \"\\n\" Case %d: %d ms\n",cas+1,b-a); } cout<<endl; for(int cas=0;cas<10;cas++) { int a=clock(); freopen("in","w",stdout); for(int i=0;i<maxn;i++) cout<<endl; int b=clock(); freopen("CON","w",stdout); printf("used \"endl\" Case %d: %d ms\n",cas+1,b-a); } } /*************copyright by sinianluoye (JLU_LiChuang)***********/不多说了,直接上测试结果,说实话,真的蛮惊讶的:、
可以清晰的看到,以换行为目的使用endl的话,效率比单纯的’\n‘要慢了17倍左右,看来以后写代码要注意这个问题了~
顺便测试了一下printf和puts,putchar的效率~
看来printf还是蛮快的,用puts换行的习惯也得改改了~
原文地址:http://blog.csdn.net/sinianluoye/article/details/44773923