以前知道使用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换行的习惯也得改改了~