【发布时间】:2012-01-21 10:48:53
【问题描述】:
我正在参加一些编程比赛,在许多问题上都需要从输入文件中读取字符串。显然,性能在这些比赛中是一个大问题,而且字符串可能很大,所以我试图了解读取这些字符串的最有效方法。
我的猜测是,使用 getchar() 逐个字符地读取字符串是最快的。这是因为即使您使用其他函数,例如 fgets() 或 getline(),这些函数仍然需要读取每个字符。
更新:我知道 I/O 不会成为大多数算法问题的瓶颈。话虽如此,如果这成为未来任何问题的问题,我仍然非常想知道您可以用来读取字符串的最快方法是什么。
【问题讨论】:
-
使用好的旧 c++ 流怎么样?
-
编程竞赛题的设计方式,I/O 不会成为瓶颈。如果你超时,那是因为你的实际工作算法不够聪明。
-
@Kari Knechtel,我同意这一点。话虽如此,因为无论如何我都需要读取输入,所以我宁愿以最有效的方式来做,而不用担心我以后是否可以改进它。
-
你错过了一些东西。
getchar()意味着您为每个字符支付函数调用的代价。正如其他人所说,I/O 可能不会成为瓶颈,但如果您使用getchar()逐个字符地读取输入字符,它可能只是在您的程序中。 -
@DanielS:如果你使用
std::ostream::read(),那么它会更快。