关于cout的一个小测试

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

时间: 2024-12-26 17:39:59

关于cout的一个小测试的相关文章

object-c编程tips-global_queue的一个小测试

前一段进行网络基础库构建的时候,网络发送的加密组包以及网络返回的回调解包处理都是在单独的主线程处理. 跟踪程序的时间发现这部分耗时还挺大,于是决定使用多线程处理,至少不应该使用主线程. 一直以来网上都在强调多线程的dispatch的妙用,自己仅仅是会用而没有实际测试过它的性能.今天将上次测试的结果发出来,说实话dispatch的多线程效率确实很高,跟cpu的核心数有很多关系. 测试思想: 使用一个自己写的耗时函数,让其执行一次所需要的时间进行记录.然后使用dispatch_global_queu

[UNet]通过一个小测试了解Command和ClientRpc的功能

作者只是业余时间接触Unity 2个月的新人一枚,如有不对的地方,请各位大神指正! Unity 5.以后使用了新的网络模块UNet(其实我接触的晚压根没用过老的- -!),但是在使用过程中确实关于UNet的资料和讨论挺少的,于是自己做了个小项目测试了Command和ClientRpc两个命令. 首先我们看看官方给出的定义: Commands Commands are sent from player objects on the client to player objects on the s

字符串的一个小测试

字符串即若干字符组成的序列,每个字符串都以'\0'结尾,由于这个特点,每个字符串都有一个额外的字符开销,所以要注意字符串越界的问题. 如: char str[10]; strcpy(str,"0123456789");//越界 同时,很多函数如strcpy.strlen.strcmp.strstr等字符串函数都是用了这个特点实现. 为节省内存,c和c++把常量字符串放到了静态区,当几个指针赋值给相同的的字符串常量时,它们会指向相同的地址.但用常量初始化数组则不同 char a1[]=&

Python下实现文件中的全文搜索小测试

username = 'test' password = '123456' while True: user_str = raw_input("Please input your name>>") pass_str = raw_input("Please input your password>>") if username != user_str or password != pass_str: print "Sorry,You 

Java正则表达式——测试正则表达式的一个小工具

正则表达式是一种强大而灵活的文本处理工具.使用它我们能以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索.一旦找到了匹配这些模式的部分,你就能够随心所欲地对它们进行处理. 关于正则表达式的语法,网上对此有介绍的文章实在是多不胜数,实在找不到,还可以查看Java的API文档,就不多介绍了.这里主要介绍一个可以测试正则表达式的小工具.直接上代码: 1 package com.test.stringregex; 2 //{Args: abcabcabcdefabc "abc+" &q

SpringMvc拦截器小测试

前言 俗话说做项目是让人成长最快的方案,最近小编写项目的时候遇到了一个小问题.小编在项目中所负责的后台系统,但是后台系统是通过系统的页面是通过ifame联动的,那么这时候问题就来了,后台所做的所有操作都是联动操作(都是基于所联动的)那么我后台所做的所有操作都是基于后台用户登录的情况下所做的.但是在联动中中所有页面都是单独存在的,如果要解决这个问题就需要在做操作之前判断用后台用户是否已经登录.想知道小编是如何实现的那就接着往下看. 简介 Spring MVC的拦截器不仅可实现Filter的所有功能

原创观点:还在认为企业或个人只能申请一个小程序吗?

今天第一次体验了整个小程序注册流程,使用的是我自己的这个简单的教程(个人无appid如何进行申请开发者权限,简单操作步骤),教程虽然是我的,我自己却没有真的实践过,真是误人子弟,自己也不一定能知道:今天亲自测试了一下:首先走完邮箱验证: 验证完毕后,开始进入信息登录,这里,有一些关键信息,是本文观点的主要支撑: 请输入管理员的身份证号码,一个身份证号码只能注册5个小程序. 然后填写完毕后,到了第二个关键点: 为了验证你的身份,请用绑定了管理员本人银行卡的微信扫描二维码. 这个点,透露了两个信息,

基于宿主机制作一个小系统

一.Linux系统的启动流程 1.启动程序 Linux系统的启动流程为:POST-->BIOS(BootSequence)-->MBR(bootloader,446)--> Kernel-->initrd-->(ROOTFS)/sbin/init(/etc/inittab). 首先上电自检POST:它负责完成对CPU.主板.内存.软硬盘子系统.显示子系统(包括显示缓存).串并行接口.键盘.CD-ROM光驱等的检测.主要检查硬件的好坏. 紧接着就是BIOS进行硬件相关初始化,之

记录一个小技巧,在一个包下的多个main函数调试

在eclipse中,有好几个class想做测试,又不想工程太多,都写在了一个包里面,也方便import 但是每次运行的时候,eclipse都默认运行第一次建立的那个main函数. 要想运行其他的,需要做一下修改. 在工具栏中, 点击run旁边的下拉箭头,会出现一个下拉菜单. 点击Run Configurations 进入到配置界面 在标注红色的区域,上面那个是选取工程,下面那个是选取该工程的主函数 在这里点search,找到你刚写的新的主函数,如果里面还看不到,可以手动输入就好了 然后点击app