读入 输出优化
在c++默认情况下,cin
与cout
的读入输出速度相当慢,然是scanf
与printf
相较于cin
、cout
速度要快的多,具体是因为什么原因呢?那又有什么办法可以让cin
、cout
的速度快起来呢?
我们可以关闭同步
std::os::sync_with_stdio(false)
这个函数的作用是关闭兼容stdio的开关,在c++中,为了使c++可以兼容c,为了防止在程序使用cin与scanf/cout与printf时发生错误混乱,c++将输出流同步绑定在了一起,这是c++为了兼容c而采取的保守措施,我们可以通过解除绑定来对c++的输入输出进行加速,而代价是cin
与scanf
/cout
与printf
不能同时使用。
在通常的情况下 cin
绑定的是 cout
,每次执行<<
操作符的时候都要调用 flush()
,这样会增加 IO 负担。可以通过 std::cin.tie(0)
(0 表示 NULL)来解除 std::cin
与 std::cout 的绑定,进一步加快执行效率。
stream函数
在这里又不得不说一说stream这个函数,在stream这个类中有两个重要的运算符,学习过c++的人对此肯定很熟悉,既是:
1、插入器 <<
向流输出数据,这里的流可以是标准输出流,而这里的标准输出流是就是流向标准输出设备(显示器)的数据。在iostream类中定义了三个输出流对象,分别是cout流对象、cerr流对象和clog流对象。
2、析取器 >>
向流中输入数据,这里的流可以使标准输入流cin
,而这里的标准输入流就是从标准输入设备(键盘)流向程序的数据。
std::ios::sync_with_stdio(false); std::cin.tie(0);
tie
tie
是将两个stream绑定的函数。即cin
绑定的是cout
,每次执行<<
操作符的时候都要调用flush()
,这会增加IO负担,所以,可以通过使用std::cin.tie(0)
(0表示NULL)来解除cin
与cout
的绑定来进一步加快执行效率。