在这里,我不得不纠正大家以为iostream很慢的这样一个以讹传讹流毒无穷的错误观念。
大家观察到的iostream慢,通常都是因为C++需要保持对C的IO Library兼容,所以C++的io library是没有buffer的,而且必须一个字符一个字符来读取!
比如说有人蛋疼这么写:
getline(cin, s);
scanf("%d", &i);
这 里getline只能一个字符一个字符读取,假如它一次读了100个字符,只用到了10个,剩下的90个没办法放回stdin里面,这样下面的scanf 就是从错误的位置读取的。所以C++的library为了兼容C,不得不一个字符一个字符读取。这样就导致C++的iostream比较慢。
好在这个行为是可以设置的。cin.sync_with_stdio(false); 这样就会让C++的iostream变快了。当然你如果这么做你得保证没有用到C的io library。
下面是测试:
[xxx@yyy ~]$ cat TestCIO.c && gcc -O3 TestCIO.c -o TestCIO.out
#include <stdio.h>
int main(int argc, char** argv)
{
char s[1024];
while(fgets(s,1024,stdin))
{
printf("%s",s);
}
}
[xxx@yyy ~]$ cat TestCXXIO.cpp && g++ -O3 TestCXXIO.cpp -o TestCXXIO.out
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
cin.sync_with_stdio(false);
char s[1024];
while(cin.getline(s,1024,'\n'))
cout << s << endl;
}
[xxx@yyy ~]$ time for ((i = 0; i < 10; i++)); do ./TestCIO.out < some_text; done
...........
real 0m7.170s
user 0m0.957s
sys 0m1.623s
[xxx@yyy ~]$ time for ((i = 0; i < 10; i++)); do ./TestCXXIO.out < some_text; done
...........
real 0m7.123s
user 0m0.742s
sys 0m1.737s
两者的速度是一致的。
相关推荐
c++的输入输入教程源码,非常实用,而且都是经过测试的。
cin与cout的用法
本文件是对cin和cout一些用法的总结,框图结构,需要用mindjet打开,(同时推介一下mindjet这款工具,很适合代码爱好者总结)。对cin、cout用法迷惑的请进
基于对话框例子程序,MFC调用控制台,利用cout、printf输出信息
基于对话框例子程序,MFC调用控制台,利用cout、printf输出信息 包含利用cout、printf输出unicode信息到控制台
通过本文,您可以完全脱离scanf/printf,仅使用cin/cout来完成一切需要的格式化输入输出功能(从非性能的角度而言)。更进一步而言,您还可以在、上使用这些格式化操作,从而代替sscanf/sprintf和fscanf/fprintf函数...
C++ 基本的输入输出 C++ 标准库提供了一组丰富的输入/输出功能,我们将在后续的章节进行介绍。本章将讨论 C++ 编程中最基本和最常见的 I/O 操作。 C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如...
在主函数main开头加入一下两句,可以让cin和cout速度大幅度增加: #include int main() { ios::sync_with_stdio(false); cout.tie(NULL); return 0; } 直观感受一下加了这两句对C++读入的性能提升(貌似比用scanf...
这两句话可以干什么?...是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段语句可以来打消iostream的输入和输出缓存,可节省时间,使效率能达到scanf与printf效率。 tie 函数: tie是将两个stre
介绍C++的格式输入输出
C++的CIN和COUT操作符的方法,主要代码如下:#includeusingnamespacestd;constintMAX_EDGE=100;constintMAX_NODE=100;/*定义一条边*/typedefstruct{intv;intt;intweight
02_cin_cout_oct_hex.cpp
cout.zip 希望对感兴趣的有所帮助
C/C++输出彩色文字printf和cout显示的文字是彩色的有颜色的
解决cout不显示,不输出,不打印
在MFC中使用控制台输入输出,可以在MFC程序中,打开控制台界面,方便的通过标准的C++输入输出,方便了程序的调试;
写算法题的时候突然发现自己忘记基本的C++:cout格式化输出了,赶紧拉出以前的C++学习笔记重新看一看。 部分内容来自教程:C语言中文网(一个很棒的网站) 有时希望按照一定的格式进行输出,如按十六进制输出整数,...
cin是输入流,cout是输出流,重载了”>>”、”<<“运算符,包含在头文件中。 先把要输出的东西存入缓冲区,再输出,导致效率降低,cin是自动判断你的变量类型,比如一个char数据只能用默认的char方法取...
#include #include using namespace std; int main() ...cout输入a,b,c的值"; cin>>a>>b>>c; s=(a+b+c)/2; if(a+b>c&&a+c>b&&b+c>a) cout(s*(s-a)*(s-b)*(s-c)); else cerr输入数据有误"; return 0; }
主要是对cout之类的一些操纵运算子。它是I/O流控制头文件,就像C里面的格式化输出一样。