默认情况下,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
,它只插入一个换行符,不会刷新缓冲区。这样就能避免不必要的性能损失。