我有一个应用程序想要从文件中逐字读取,以空格分隔。我正在使用这些代码:
std::istream in;
string word;
while (in.good()) {
in>>word;
// Processing, etc.
...
}
我的问题是对单词本身的处理实际上相当轻松。主要的时间消耗者是我运行的一组 mySQL 查询。
我的想法是编写一个缓冲类,它从文件中读取大约 1000 字节的内容,将字符串流初始化为缓冲区,并透明地从中执行提取以避免大量 IO 操作。
想法和建议?
最佳答案
istream 与缓冲区类一起工作,因此它通常会以相当大的 block 读取(尽管不能保证确切的大小)。因此,您可能已经获得了想要的效果。如果你自己处理缓冲,这有点不平凡——当你到达缓冲区的末尾时,你很可能会在一个单词的中间,所以你必须将当前单词复制到缓冲区的开头并阅读更多内容以填充缓冲区的其余部分,然后才能处理该单词。
很可能你应该只使用像这样的更正循环:
while (in>>word) {
// process word
}
...但是您可能通过将文件直接读入字符串流并从那里处理单词来稍微提高速度:
std::istream in;
std::istringstream buffer;
buffer << in.rdbuf();
while (buffer >> word) {
// process word
}
但是对于非常大的输入文件,这可能是有害的。
关于c++ - 编写我自己的 iostream 实用程序类 : Is this a good idea?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2441220/