我有代码读取每四行并用它做一些事情
ifstream in(inputFile, ios::in);
string zeile;
for (int z = 0; z < numberOfSequences; z++) {
getline(in,zeile); // skip 3 lines
getline(in,zeile); // skip 3 lines
getline(in,zeile); // skip 3 lines
getline(in,zeile);
// do something with zeile
}
我的问题是,ASCII文件有超过250 000 000行。所以我对跳过3行最有效的方式感兴趣。 getline
是否对字符串执行某种类型的解析in
或这是最有效的方法吗?我不想浪费时间跳绳。
答案 0 :(得分:3)
这几乎是 最有效的方式;唯一的解析&#34;发生的事情是搜索您需要的行尾。
你唯一可以改进的就是不要不必要地存储比你实际要处理的行多四倍的行。您可以使用std::basic_istream::ignore
:
std::ifstream in(inputFile, std::ios::in);
for (int z = 0; in && z < numberOfSequences; z++) {
// Skip three lines
for (int i = 0; i < 3; i++)
in.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
// Read the fourth line...
std::string zeile;
if (std::getline(in, zeile))
foo(zeile);
}