关闭输入输出同步以提高C++的cin; cout效率
默认情况下,C++的标准输入输出库(iostream)会与C语言的标准输入输出库(cstdio)进行同步,以确保二者之间的IO操作不会出现问题。但是,同步会带来一定的性能损失。
为了提高cin,cout的效率,可以有以下语句
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
return 0;
}
解释
1.ios::sync_with_stdio(false);: 这个语句用于关闭C++的标准输入输出流和标准C输入输出流之间的同步。通过将这个语句设置为false,可以提高程序的输入输出效率,但需要注意的是,设置之后不要用printf,scanf。在使用cin和cout的同时还使用C语言的输入输出函数(如printf和scanf)可能会导致未定义行为。
2.cin.tie(nullptr);: 这个语句用于断开cin和cout之间的连接。默认情况下,cin和cout是关联的,即每次从cin读取输入时,会自动刷新cout的输出缓冲区。通过将这个语句设置为nullptr,可以解除关联,提高输入效率。
3.cout.tie(nullptr);: 这个语句用于断开cout和cin之间的连接。默认情况下,cout和cin是关联的,即每次向cout写入输出时,会自动刷新cin的输入缓冲区。通过将这个语句设置为nullptr,可以解除关联,提高输出效率。
注意
1.此三条语句应放于main函数开头。
2.使用了 ios::sync_with_stdio(false) 后,最好避免使用 endl,应用\n。endl 是一个控制字符,它不仅仅是在输出流中插入一个换行符,还会刷新缓冲区。当输入输出流被同步时,刷新缓冲区可能会带来一定的性能损失。然而,当关闭输入输出同步时,endl 会使输出缓冲区都被立即刷新,这会引起一次不必要的系统调用,降低程序的执行效率。这可能导致一些意外的行为或性能问题。使用换行符 ‘\n’ 可以替代 endl,它只插入一个换行符,不会刷新缓冲区。这样就能避免不必要的性能损失。