c++ - seekg 还是 ignore 更有效?
问题描述
我正在使用 C++ 编写一个对时间非常敏感的应用程序,因此效率至关重要。
我有一个std::ifstream
, 并且我想跳过特定数量的字符(也就是字节偏移量,我没有使用wchar_t
)来到达特定的行,而不是std::getline
用来读取每一行,因为它对我来说效率太低了。
使用seekg
或ignore
跳过指定数量的字符并从那里开始阅读更好吗?
size_t n = 100;
std::ifstream f("test");
f.seekg(n, std::ios_base::beg);
// vs.
f.ignore(n);
解决方案
查看 cplusplus.com 的这两个功能,似乎ignore
会使用 sbumpc 或 sgetc 来跳过请求的字符数量。这意味着它甚至可以在本身不支持跳过的流上工作(ifstream 支持),但它也处理每个字节。
seekg
另一方面使用 pubseekpos 或 pubseekoff,这是实现定义的。对于文件,这应该直接跳到所需的位置,而不处理直到它的字节。
我希望seekg
效率更高,但正如其他人所说:使用大文件进行自己的测试将是您的最佳选择。
推荐阅读
- ios - 如何使用文档数量的价值?
- r - 如何将标签添加到 facet_wrap(ed) geom_count 图?
- ssl - 如何在没有证书的客户端的情况下为 mqtts 配置 Mosca?
- c# - 在 EF Code First 中使用视图与迁移冲突
- c# - 操作多个datagridview
- visual-studio - VS 2019 用鼠标导航
- c# - 对于包含多行 LIST 的条目,如何选择使用 LINQ?
- reactjs - 使用钩子将道具从父组件传递给子组件?
- c# - 为什么我的 xaml 与材料设计网站上的示例相同时会出现错误?
- java - Hbase MapReduce:如何使用自定义类作为映射器和/或减速器的值?