GeekHub

提高cout和cin速率的方法

最近用cout和system(“clear”)做了一个简单的调试界面,但是受制于cout的速度较慢,导致这个界面的帧率不能做的太高,否则会造成比较严重的画面闪烁和延迟。

通常来说使用printf会比cout效率更高,但是之所以cout在大多数时候速度都没有pringf快,主要是因为cout(由iostream定义)需要保证对printf(由stdio.h定义)的兼容性,因此默认配置下cout与stdio输出流捆绑,每次执行时都需要与stdio进行同步,影响了cout的输出速度,同理scanf在默认状态下也会比cin速度更快。

解决方案除了使用printf替代cout、用scanf替代cin外,可以在cout/cin前使用:

ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);

ios::sync_with_stdio(false)用来禁用cout/cin与stdio之间的同步,cin.tie(0)和cout.tie(0)实现cin、cout与当前输出流捆绑,可以大幅提高iostream的速度,其中cin.tie(0)和cout.tie(0)大多数时候可以省略。

若代码中cout和cin较多,可在文件头定义宏:

#define IOS    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

这样每次在使用cout或cin前加上IOS便可以提高cout/cin的速率,具体原理可以参见:sync_with_stdio(), tie()的应用

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注