有没有办法比getchar()(C / C ++)更快地读取字符串?

时间:2012-01-21 10:48:54

标签: c++ c input

我正在参加一些编程竞赛,在许多问题上需要从输入文件中读取字符串。显然,性能是这些竞争中的一个大问题,字符串可能很大,所以我试图理解读取这些字符串的最有效方法。

我的猜测是,使用getchar()读取char字符串char是最快的。那是因为即使你使用其他函数,比如fgets()或getline(),这些函数仍然需要读取每个char。

更新:我知道I / O不会成为大多数算法问题的瓶颈。话虽这么说,我仍然非常想知道什么是你用来读取字符串的最快方法,如果这成为任何未来问题的问题。

2 个答案:

答案 0 :(得分:5)

您可以使用std::istream::read()函数读取一大块未格式化的数据。它的速度相对较快,因为数据未格式化operator>>的所有重载读取格式化的数据,与read()相比,这使得从流中读取的速度变慢。

同样,您可以使用std::ostream::write()函数立即将一大块数据写入输出流。

答案 1 :(得分:1)

反之亦然,一次性将更大的数据块读入内存远比一次读取一个字符快得多。在任何情况下,操作系统和/或硬盘驱动器都可以缓存数据,但单独的函数调用开销对于每个字符重复循环通过标准库,操作系统,文件系统和设备驱动程序对于大型数据集来说非常重要。

处理字符串时,您可能会考虑一些更重要的性能问题:Back to Basics by Joel Spolsky

无论哪种方式,最有说服力的方法就是编写测试代码来研究不同I / O方法之间的区别。