在C++涉及到大量输入输出时,为了加快速度,我们可以在main函数里面第一行加一句ios::sync_with_stdio(false);
这句话的意思是关闭缓冲区的同步,默认是开启的。
如果是开启的,那么cin cout 和scanf printf可以随意混写,即cpp里面写c语言。
如果是关闭的,cin cout 和scanf printf就不能混写,不然会造成输入输出的顺序错乱。
一般是因为嫌cin cout比较慢才加一句ios::sync_with_stdio(false); 这个时候就不要用scanf printf,只用cin cout
cin cout之所以慢是因为大部分时间在做缓冲区的同步,关闭了之后就很快,基本和scanf printf差不多,甚至有时候更快。
二,取消缓冲区cout是ostream类的全局单例对象,而ostream继承了ios_base类,
除了按照ios_base类中的方式去设置格式,也可以用cout重载的方法:
int main()
{
cout << cout.flags() << endl;
cout << unitbuf;
cout << cout.flags() << endl;
cout << nounitbuf;
cout << cout.flags() << endl;
return 0;
}
输出:
513
515
513
其中unitbuf表示原子缓冲区,即没有缓冲区,直接把输出流的内容输出。
反之,nounitbuf表示有缓冲区。
三,cin输入错误处理当代码是输入整数,而实际输入是非法字符(如字母)时,程序就会挂掉。
这时需要重置cin标识和清空缓冲区才行。
示例:
cin >> r >> c;
if (!cin) //当输入失败(比如输入的不是整数)时,必须先重置cin,然后手动清空cin的缓冲区,然后才能重新输入
{
cin.clear(); //这2个函数用来处理错误输入
cin.ignore();//清空cin缓存区
//cin.sync();
}
clear函数是清空cin标识的,cin标识是输入错误时产生的,要手动清除才能继续输入。
ignore和sync函数都可以用来清空缓冲区,这2个函数有区别,但是区别不大。
四,文件尾 五,循环读取