scanf和cin的差异

scanf和cin的差异

引例:http://www.cnblogs.com/shenben/p/5516996.html

大家都知道,在C++中有两种输入、输出方式—scanf和cin,但是,它们之间存在的差异,你们知道么?下面请看测评吧!

测试题目:

输入n个数,输出n个数。

测试环境:
ubuntu12.04 i3CPU
4G内存 7200转硬盘

测试结果:

测试结果使用linux的time测试时间,结果如下:

10000组数据时:

real代表程序执行总时间,user代表用户输入数据的时间,sys代表系统时间

从上面的测试结果中,貌似没有发现scanf的厉害之处甚至好像还慢些(数据存在波动性),那我们接着往下看:

100000组数据时:

这时scanf已经开始崭露头角了,不过差异还不是很大,咱们接着往下看!

1000000组数据时:

这时候大家可以发现,cin所用的时间是scanf的两倍还多!!

后面就不继续往下测的,对这个感兴趣或者想自己验证的童鞋可以继续。。。。不过据说scanf的输入速度是cin的3倍多!!

测试总结:

从以上测试结果,大家可以发现scanf和cin的巨大差异了吧!那么,这个东西最主要在哪应用呢?不用说都能想到,当然是ACM平台啦!那些算法没问题时间超限的童鞋,你们说不定就是因为用了cin导致的呢!

再大的数据范围就要

#include<cstdio>
#include<iostream>
using namespace std;
#define ll long long//自定数据范围
inline ll read(){
    register ll f=1,x=0;
    register char ch=getchar();
    while(ch>‘9‘||ch<‘0‘){if(ch==‘-‘) f=-1;ch=getchar();}
    while(ch>=‘0‘&&ch<=‘9‘) {x=x*10+ch-‘0‘;ch=getchar();}
    return x*f;
}
int main()
{
    ll n=read();
    printf("%lld\n",n);
    return 0;
}

更快的我还没学会。。。

时间: 2024-08-27 22:23:22

scanf和cin的差异的相关文章

关于scanf与cin哪个快的问题

一开始入c++的时候成天跑cin,cout 直到有一天用cin,cout超时 才知道scanf比cin快的多 但是后来又听说加了ios::sync_with_stdio(false);的cin跟飞一样 那么到底哪个快呢? 咱们来做个小测试 题目选择:https://www.luogu.org/problem/show?pid=3368#sub 树状数组模板2(因为这题数据比较大) 首先是龟速的cin与cout 成功的T掉三个点 =.= 那么scanf呢?? 完美的完成任务!! 身负众望的ios:

scanf和cin的返回值(转)

需要连续从标准输入读取数据时,可以采用下面两种不同的方式判断文件结束: [cpp] view plaincopy intwhile"%d"dowhiledo 首 先看scanf,当成功读取时返回读取的项的数目,如:scanf("%d %d",&i,&j)返回2,scanf("%d %f %s",&i, &f, c)返回3.这个数目可以是你希望读取的项数,也可能小于希望读取的项数,在匹配失败时返回0(如:用scanf

HDU 5011 Game Nim博弈 (涉及scanf和cin效率比较)

scanf是格式化输入,printf是格式化输出. cin是输入流,cout是输出流.效率稍低,但书写简便. 格式化输出效率比较高,但是写代码麻烦. 流输出操作效率稍低,但书写简便. cout之所以效率低,正如一楼所说,是先把要输出的东西存入缓冲区,再输出,导致效率降低. 缓冲区比较抽象,举个例子吧: 曾经就遇到过这样的情况(类似的), int i; cout<<'a'; cin>>i; cout<<'b'; 运行结果什么都没看到输出,输入一个整型比如3再按回车后ab同

对于scanf和cin的输入输出速度的验证

本文为https://www.byvoid.com/zhs/blog/fast-readfile的验证性文章 --------------------------------------------------------------------------- 首先生成一千万个随机数 1 #include<cstdio> 2 #include<ctime> 3 #include<cstdlib> 4 int main () 5 { 6 freopen("dat

scanf 和cin 的区别

笔试的时候经常遇到突然string s;cin>>s; 有的时候编译会错误,不知道为什么. 今天在练习枚举类型的时候,也遇到这样一个问题. enum weekday{Monday,Tuesday} day; cin>>day;//报错 scanf("%d",&day);//正常 周纯洁的书上也都是用scanf;看样子scanf和printf不能随便丢弃啊.毕竟是标准输入输出流,没有缓存区 scanf是格式化输入,printf是格式化输出. cin是输入流

mac 下 sublime text 运行c++/c 不能使用scanf/cin

{ "cmd": ["g++", "${file}", "-o", "${file_path}/${file_base_name}"], "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", "working_dir": "${file_path}", "sel

Java中的“scanf()、cin()、input()&quot;

最近在写一个Java程序时遇到一个问题,就是如何在Java里面输入数值,又叫做获取键盘输入值. 因为c语言里面有scanf(),C++里面有cin(),python里面有input().Java里面有三种方法: First:从控制台接受一个字符并打印 import java.io.*; import java.io.IOException; public class test { public static void main(String args[]) throws IOException{

cin和scanf的速度差别

好长时间没有遇到这种问题了,以前虽然知道scanf比cin快,但是没想到快这么多,见图. 50万的数据. scanf输入: cin输入: 网上说用std::ios::sync_with_stdio(false);可以优化.优化完的速度: 还和纯scanf差好多.

cin 与 scanf 的不同

cin输入更方便: 首先,cin 是个C++类型对象,它的类型是basic_istream,scanf 是个不定参数的函数,其次,cin 所属的类重载了 >> 运算符,使输入更简单了,比如 double d; cin>>d;而 scanf 不一样的,double d;scanf("%lf",&d);看起来麻烦一点.另外,cin 也更安全,不会发生内存溢出.char c; scanf("%lf",&c); //这时需要8个字节的