AlenaNuna

导航

如何使cin读取速度提高到接近scanf?

cin和cout的速度通常比scanf和printf慢很多,但是只要稍微处理以下,就可以提升到接近scanf的速度。

方法:(可以叠加使用)

1.使用ios_base::sync_with_stdio(false);命令

ios_base::sync_with_stdio(false);的作用:C++标准库默认会同步C++的标准I/O和C的标准I/O。关闭同步之后‘cin’和‘cout’将不再与C标准库的‘scanf’和‘printf’同步,可以减少同步开销,从而提高性能。

cin.tie(NULL);的作用:默认情况下‘cin’与‘cout’是绑定的,接触绑定后,‘cin’和‘cout’将不再相互依赖,减少不必要的刷新操作,从而提高性能。

2.使用cin.tie(NULL);命令

cin.tie(NULL);的作用:默认情况下‘cin’与‘cout’是绑定的,接触绑定后,‘cin’和‘cout’将不再相互依赖,减少不必要的刷新操作,从而提高性能。

奇怪的问题:用不用cout.tie(NULL);? 

回答:‘cout’通常不需要解除与其他流的绑定,因为‘cout’的输出操作不依赖于‘cin’的刷新。

3.使用'\n'替代endl

解释:endl会触发流的刷新操作,而'\n'不会。因此,在不用立刻刷新的情况下可以用'\n'替换endl提高速度。

什么是不用立刻刷新的情况:

①当你只是想在控制台上换行,而不需要立刻看到输出结果时。

②当你有一系列连续的输出操作时,可以用'\n'进行换行,减少刷新缓冲区的次数。

4.缓冲输入输出

将输入输出集中在一起处理,减少频繁的I/O操作。例如先将所有输入读入一个字符串或缓冲区再处理。

 

总结:

一般来说,使用方法1+2就够了。方法3在绝大多数情况下都是可以用的(尤其是当你在竞赛或者考试时)。


by:AlenaNuna

 

posted on 2024-09-09 14:42  AlenaNuna  阅读(58)  评论(0编辑  收藏  举报