cin,cout与scanf,printf

AAA20090987 2010-04-12 11:52:03
网上说scanf,printf与cin,cout相比,速度快了十多倍,是这样吗?
为什么cin, cout会这么慢的呢?与scanf, printf相比,cin,cout的优势在哪里呢?
...全文
520 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
pimkle 2012-11-01
  • 打赏
  • 举报
回复
刷ACM的时候发现的这个问题,当时间限制不再是2s,改成1s的时候,用cin,cout超时,另外一个问问过关
maohanyangabc 2012-08-05
  • 打赏
  • 举报
回复
试了一下,cin和scanf同时读入文件cin用时是scanf的5倍左右。
AAA20090987 2010-04-18
  • 打赏
  • 举报
回复
谢谢各位的回答,结帖啦。
白云飘飘飘 2010-04-12
  • 打赏
  • 举报
回复
cin,cout的好处之一是类型安全,语法简单。
liyanlin122 2010-04-12
  • 打赏
  • 举报
回复
今天无意中发现cout和printf是有点区别的,一个是输出语句,一个是输出函数

我编了个函数如下:

#include "iostream.h"
#include "stdio.h"
main()
{
int a;
for(a=0;a<24;a++)
{
printf("++++++++++++\n");
cout<<"============\n";
printf("############\n");
}
printf("@@@@@@@@@@@\n");
}

运行结果如下:

++++++++++++

++++++++++++

############

############

@@@@@@@@@@@

============

============

cout先是把输出结果存到缓存区,然后一次性输出,其实COUT输出的时候也是调用了printf函数;

pintf函数是每次输出结果;

这就是为了么在TIME程序中cout运行的时间要比printf函数快的原因;

当时有一点需要注意:cout<<"============\n";和cout<<"============"<<endl;也有不同,\n只是一个字符,而endl会将缓存区的数据全部输出并清零;在TIME程序中,如果采用cout<<"============"<<endl;结构反而会比Printf慢,因为多了一道调用缓存手续

下面打个很形象的比喻,大家都会明白

比如有100个鸡蛋,需要从A拿到B点,相当于程序中的输出

Printf把鸡蛋一次一个用手拿到B点

cout<<" \n"先把鸡蛋全部放到篮子,然后一次性拿过去取出

cout<<" "<<endl先把鸡蛋放到篮子,然后一次一个拿过去再取出

尤其可见哪个快那个慢显而易见



做个记号,以后慢慢看~~
From15 2010-04-12
  • 打赏
  • 举报
回复
学习一下,期待更多的回答。。
小小攻城师 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 aaa20090987 的回复:]
网上说scanf,printf与cin,cout相比,速度快了十多倍,是这样吗?
为什么cin, cout会这么慢的呢?与scanf, printf相比,cin,cout的优势在哪里呢?
[/Quote]
可以理解scanf是cin的一个成员函数,然后运用运算符重载shift运算符>>,所以他是对象调用成员函数,肯定要比直接调用函数麻烦的多。但是其实无所谓,效率是吹毛求疵的,因为并不在乎那一点点的差别的。
xuhesheng 2010-04-12
  • 打赏
  • 举报
回复
函数和对象的差异而已
cy330206 2010-04-12
  • 打赏
  • 举报
回复
cin ,cout是类,类的结构比较复杂,与scanf和printf没的比,在速度方面
leecapacity 2010-04-12
  • 打赏
  • 举报
回复
printf ,scanf 后边直接跟的是&,比cin和cout快,cin和cout是运算符
szxyszxy2 2010-04-12
  • 打赏
  • 举报
回复
cin cout 是对象,优势在于封装,可以做很多事,个人觉得">>" "<<"运算符的重载功能非常强大
herman~~ 2010-04-12
  • 打赏
  • 举报
回复
print族是函数调用
cout族是类对象的调用,需要构造类的成本
wade_2003 2010-04-12
  • 打赏
  • 举报
回复
cin ,cout 相比printf ,scanf多了一个缓冲区
2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhao4zhong1 的回复:]

VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
[/Quote]
机器人?
赵4老师 2010-04-12
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
wucap 2010-04-12
  • 打赏
  • 举报
回复
printf scanf 是C语言里面的,是成员函数,cin cout是基于流的输入与输出,其区别是多了一个缓存区,
aleyn 2010-04-12
  • 打赏
  • 举报
回复
期待更多回答中……

64,318

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧