首页 > 解决方案 > seekg 还是 ignore 更有效?

问题描述

我正在使用 C++ 编写一个对时间非常敏感的应用程序,因此效率至关重要。

我有一个std::ifstream, 并且我想跳过特定数量的字符(也就是字节偏移量,我没有使用wchar_t)来到达特定的行,而不是std::getline用来读取每一行,因为它对我来说效率太低了。

使用seekgignore跳过指定数量的字符并从那里开始阅读更好吗?

size_t n = 100;
std::ifstream f("test");
f.seekg(n, std::ios_base::beg);
// vs.
f.ignore(n);

标签: c++performance

解决方案


查看 cplusplus.com 的这两个功能,似乎ignore会使用 sbumpc 或 sgetc 来跳过请求的字符数量。这意味着它甚至可以在本身不支持跳过的流上工作(ifstream 支持),但它也处理每个字节。

seekg另一方面使用 pubseekpos 或 pubseekoff,这是实现定义的。对于文件,这应该直接跳到所需的位置,而不处理直到它的字节。

我希望seekg效率更高,但正如其他人所说:使用大文件进行自己的测试将是您的最佳选择。


推荐阅读