我想在C++中从文件中读取一行(但不是第一行)。有没有聪明的方法来完成这个任务?现在我正在考虑使用getline()并在循环中继续,但似乎这不是最优的方法?有什么建议吗? 问候
文本行被称为“可变长度记录”,由于它们的长度不固定,因此您无法轻松地定位到文件中的某一行。
一种方法是维护一个文件位置的std::vector
。遍历文件,读取每一行并记录其位置:
std::vector<std::streampos> text_line_positions;
// The first line starts at position 0:
text_line_positions.push_back(0);
std::string text;
while (std::getline(my_text_file, text))
{
const std::streampos position = my_text_file.tellg();
text_line_positions.push_back(position);
}
您可以从向量中检索文件位置:
const std::streampos line_start = text_line_positions[line_number];
编辑1:文本向量
一种更优化的方法是将每行文本读入一个std::vector
中:
std::vector<std::string> file_text;
std::string text;
while (std::getline(my_file, text))
{
file_text.push_back(text);
}
以上方法的缺点之一是需要足够的内存来容纳文件。
然而,由于不需要再次读取文件,因此访问时间很快。
与所有优化一样,存在妥协。
linenumber * linelength
,其中linelength
必须包括换行符。 - Unimportant