cin,cout,printf,scanf效率对比
From:http://www.cnblogs.com/killerlegend/p/3918452.html
Author:KillerLegend
Date:2014.8.17
杭电OJ之3233很简单的一个问题,谁知道一直提示我超时,超时,最后都快哭了,C++代码如下:
#include <iostream> #include <iomanip> using namespace std; int main() { int t,tmp,band,index=0; while(cin>>t>>tmp>>band) { if(t==0||tmp==0||band==0) break; double a,b,sum=0.0; for(int i=0;i<t;++i) { cin>>a>>b; sum+=a*(100-b)*0.01; } cout<<"Case "<<++index<<": "<<fixed<<setprecision(2)<<sum/band<<endl<<endl; } return 0; }
后来...将输入输出流换成了scanf和printf,结果就神奇的AC了...
#include <cstdio> int main() { int t,tmp,band,index=0; while(scanf("%d%d%d",&t,&tmp,&band)) { if(t==0||tmp==0||band==0) break; double a,b,sum=0.0; for(int i=0;i<t;++i) { scanf("%lf%lf",&a,&b); sum+=a*(100-b)*0.01; } printf("Case %d: %.2f\n\n",++index,sum/band); } return 0; }
这真是太让人伤心了...所以我打算测试一下cin和scanf,cout和printf:
cout测试:
#include <iostream> #include <cstdio> #include <time.h> using namespace std; int main() { freopen("in.conf","r",stdin); freopen("out.conf","w",stdout); clock_t t1,t2,t3,t4; t1 = clock(); for(int i=0;i<10000000;++i)cout<<i<<" "; t2 = clock(); cout<<"cin-time:"<<(double)(t2-t1)/CLOCKS_PER_SEC<<endl; return 0; }
结果:5.206s
printf测试:
#include <iostream> #include <cstdio> #include <time.h> using namespace std; int main() { freopen("in.conf","r",stdin); freopen("out.conf","w",stdout); clock_t t1,t2,t3,t4; t1 = clock(); for(int i=0;i<10000000;++i)printf("%d ",i); t2 = clock(); cout<<"cin-time:"<<(double)(t2-t1)/CLOCKS_PER_SEC<<endl; return 0; }
结果:6.202s
我们使用上面循环1千万次所产生的数据(78.89MB),用于下面读入时的测试数据:
使用cin读入:
#include <iostream> #include <cstdio> #include <time.h> using namespace std; int main() { freopen("out.conf","r",stdin); freopen("in.conf","w",stdout); clock_t t1,t2,t3,t4; t1 = clock(); int k; for(int i=0;i<10000000;++i)cin>>k; t2 = clock(); cout<<"cin-time:"<<(double)(t2-t1)/CLOCKS_PER_SEC<<endl; return 0; }
结果是38.507s
使用scanf读入:
#include <iostream> #include <cstdio> #include <time.h> using namespace std; int main() { freopen("out.conf","r",stdin); freopen("in.conf","w",stdout); clock_t t1,t2,t3,t4; t1 = clock(); int k; for(int i=0;i<10000000;++i)scanf("%d",&k); t2 = clock(); cout<<"cin-time:"<<(double)(t2-t1)/CLOCKS_PER_SEC<<endl; return 0; }
结果是4.204s
结果一览表:
结论:输出时尽量使用cout,输入时尽量使用scanf.
cin,cout,printf,scanf效率对比的更多相关文章
- cin/cout与scanf/printf的比较
转自http://www.cnblogs.com/penelope/articles/2426577.html cin .cout 基本说明: cin是标准输入流对象,代表标准输入设备(键盘), ...
- [笔记]cin、cout与scanf、printf的效率差异对比分析
之前上传UVa227 puzzle时,好不容易AC了,但发现自己用时50(ms),而在VJ上看到人家都是40ms.20ms,于是打开一个20ms的代码查看人家强在哪里.但结果研究了半天感觉差不多,于是 ...
- printf scanf cin cout的区别与特征
printf和scanf是c语言的输入输出,学习c++以后,自然是用cin cout这两个更简单的输入输出 printf scanf 都需要进行格式控制,比较麻烦,但优点是速度比较快,毕竟多做了一些事 ...
- 8-cin cout PK scanf printf(速度快慢问题对比)
我们在c++ 中使用cin cout很方便但速度很慢,导致有些题目用cin就超时而用scanf则就ac了,那到底改用谁? cin慢是有原因的,其实默认的时候,cin与stdin总是保持同步的,也就是说 ...
- acdream B - 郭式树 (水题 卡cin,cout, 卡LL)
题目 输入正好是long long的最大, 但是答案超long long 所以用unsigned, 不能用cin cout否则一定超时: 不能用abs(), abs 只用于整数. unsigned ...
- golang 浮点数 取精度的效率对比
需求 浮点数取2位精度输出 实现 代码 package main import ( "time" "log" "strconv" " ...
- read()/fread()/mmap()执行效率对比
一. read()/fread()/mmap()执行效率对比 系统调用read.c: #include <sys/types.h> #include <sys/stat.h> ...
- openCV 和GDI画线效率对比
一. 由于项目需要,原来用GDI做的画线的功能,新的项目中考虑到垮平台的问题,打算用openCV来实现,故此做个效率对比. 二. 2点做一条线,来测试效率. 用了同样的画板大小---256*256的大 ...
- C++输入输出流 cin/cout 及格式化输出简介
C++ 可通过流的概念进行程序与外界环境( 用户.文件等 )之间的交互.流是一种将数据自源( source )推送至目的地( destination )的管道.在 C++ 中,与标准输入/输出相关的流 ...
随机推荐
- Java 多线程(三)之线程状态及其验证
目录 线程状态 Thread.State 状态类型 定义 说明 状态转换 状态验证 「NEW」-> 「RUNNABLE」 -> 「TERMINATED」 「RUNNABLE」 -> ...
- [C#]使用Join与GroupJoin将两个集合进行关联与分组
本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 本文使用的开发环境是VS2017及dotNet4.0,写此随笔的目的是给自己及新开发人员作为参 ...
- 面向对象第一次练手-------ArrayList集合、类、对象、冒泡排序、类型转换
思维转不过弯儿来 怎么做都是错 哪怕差一个()就成功的事情,也是千差万别 忽然想到一句话:差一步就成功的距离 = 差几万米就成功的距离 部分的理解和都体现在代码和注释里 using S ...
- Python魔术世界 1 如何使用Visual Studio在WIN10中一键安装Python3入门编程环境并测试Django
本文通过VS安装Python和Django的环境,创建了一个Web程序,前后5分钟的操作,让你快速入门Python的编程世界,各种Python和Django的概念会在实战中给你娓娓道来. Django ...
- Unity2D 面向目标方向
在2d空间上,假设角色的自身的y轴方向为正方向,如果要让角色随时面向一个目标点. 这里假设(0,0)点为目标点 第一种: Vector3 v = Vector3.zero - transform.po ...
- idou老师教你学Istio 17 : 通过HTTPS进行双向TLS传输
众所周知,HTTPS是用来解决 HTTP 明文协议的缺陷,在 HTTP 的基础上加入 SSL/TLS 协议,依靠 SSL 证书来验证服务器的身份,为客户端和服务器端之间建立“SSL”通道,确保数据运输 ...
- 从零系列--开发npm包(一)
一.目的 主要是纪录和回顾自己开发的一些步骤以及遇到的一些问题和解决方案 二.准备工作 1.IDE 选择 VS Code 2.安装node 环境 (https://nodejs.org/zh-cn/) ...
- libimobiledevice --Mingw32交叉编译
本文只描述 windows环境下的使用情况,linux平台基本雷同. 一.配置编译环境. (1)操作系统 :Windows10 (64bit). (2)类unix环境:Cygwin(64bit) 下载 ...
- C++ 继承和派生介绍
继承(inheritance)是软件重用的一种方式,程序员通过继承可以吸收已有类的数据和行为来创建新类,并可以添加新的数据和行为来增强类的功能.创建新类时,并不需要创建全新的数据和成员函数,我们可以指 ...
- ORACLE创建数据库时无法创建目录
ORACLE创建数据库时无法创建目录,如图所示信息 原因:没有创建写入的权限 解决:修改文件夹权限即可 F:\oracle\product\10.2.0\db_1\cfgtoollogs\dbca 增 ...