尽快读取标准输入

时间:2014-03-15 00:00:50

标签: c++ optimization io

我一直在努力寻找尽可能快地从标准输入读取的问题。我的任务是使用输入整数进行一些临时操作。直接问题是用空格分隔的整数序列,并且EOF作为指示输入结束的标志。我已经使用了

while (cin>>a) { //here are the operations }

但这还不够快。我听说编写自己的函数只读取整数可能是一种方式,但我不知道如何实现这种功能。你对此有所了解吗?  那么在C ++中读取标准输入的更快的方法是什么?请写一下,因为对于渴望真正快速计划的人来说,这是每个项目的解决方案...... 提前感谢你,我等你的回复!

1 个答案:

答案 0 :(得分:2)

至少有两个瓶颈,一个不受你的程序控制。

瓶颈1 - 输入你的程序。
第一个瓶颈是从输入源获取数据。无论是磁盘驱动器,键盘还是鼠标,它都会比程序运行速度慢。操作系统控制着这个瓶颈。

您可以通过执行块读取来提高效率,但稍后会对此进行更多介绍。

瓶颈2 - 文本到内部表示
第二个瓶颈涉及将一个或多个字符转换为内部数字。在处理文本时,没有办法解决这个问题;必须这样做。

优化文字数字输入
处理输入中文本编号的最快方法是将输入读入大缓冲区并将内存中的文本转换为数字。

所以,以C ++流为例:

const unsigned int BUFFER_SIZE = 1024u;
unsigned char buffer[BUFFER_SIZE];
cin.read((char *)buffer, BUFFER_SIZE); // Read 1k at a time.

下一步,将文本转换为内部表示,有很多可能性。 我建议使用std::istringstream

从cin读取
cin读取时,所有优化都可以在垃圾箱中抛出。用户输入数字的等待时间与处理器的执行时间相比是如此之大,以至于优化不会给您带来任何重要性。例如,如果我优化您的程序以节省100毫秒,用户将看不到任何效果,因为用户需要花费数千毫秒来输入数字(即使在每分钟60字的高打字速度下)。如果您想要更快的处理,则必须将文本放入文件中。

<强> Microoptimizations 这种优化称为微优化。您可能正在优化不像其他区域那样执行的代码区域。此外,如果您对程序进行了更改,则可能会破坏优化。

在优化之前专注于正确性和稳健性。

相关问题