cin cout 快速输入输出(效率优化)
来源:互联网 发布:深圳航天信息软件下载 编辑:程序博客网 时间:2024/05/30 22:50
在这里,我不得不纠正大家以为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
两者的速度是一致的。
- cin cout 快速输入输出(效率优化)
- cin cout 快速输入输出(效率优化)
- 输入输出cin,cout用法
- cin/cout 效率问题
- 标准输入输出流cin、cout
- cin cout 输入输出十六进制,八进制
- 输入输出流的细节(cin.clear,cin.sync(),cout的一些细节处理)
- cin cout输入输出pk printf scanf
- c++标准输入输出流:cin和cout
- 关于printf/scanf 与 cin/cout 输入输出的速度研究
- C++语言中的输入输出流------cin 和 cout
- cin/cout
- cin & cout
- cin & cout
- cin &&cout
- cin cout
- cin cout
- cin&&cout
- linux更改主机名
- 数理逻辑:公理化算术(10)算术函数性质的公理可推出性与含义可推出性
- ConcurrentHashMap
- Unity3D Shader官方教程翻译(六)----Shader语法:Pass的Color, Material, Lighting
- oralceDB:数据库名、实例名、数据库域名、服务名、操作系统环境变量
- cin cout 快速输入输出(效率优化)
- 奇怪了:通知的委托方法必须在注册通知的 后边,除非有声明 ios6
- 打补丁时删除.svn的隐藏文件
- windows下如何在plsql中配置连接实例
- Windows7与Window2008 64位IIS7上面配置操作Excel
- Unity3D Shader官方教程翻译(七)----Shader语法:Pass的Culling & Depth Testing
- android 删掉系统软件
- 《partner4java 讲述MySQL》之第一步:基本语法
- JAXB2完成java bean到xml的相互转换