这实际上取决于您将如何解析文本。一种方法是简单地将数据读入字符串向量。我假设您已经涵盖了诸如可扩展性/内存使用等问题。
std::vector<std::string> lines;
std::string line;
ifstream file(filename.c_str(), ios_base::in);
while ( getline( file, line ) )
{
lines.push_back( line );
}
file.close();
这会将您的文件缓存在lines
. 接下来你需要通过线路
for ( std::vector<std::string>::const_iterator it = lines.begin();
it != lines.end(); ++it)
{
const std::string& line = *it;
if ( line.empty() )
continue;
switch ( line[0] )
{
case 'g':
// Some stuff
break;
case 'v':
// Some stuff
break;
case 'f':
// Some stuff
break;
default:
// Default stuff including '#' (probably nothing)
}
}
当然,这非常简单,很大程度上取决于您要对文件做什么。
您作为示例给出的文件大小几乎不可能导致 IO 压力(除非您使用一些非常轻量级的设备),但如果您一次读取多个文件,我想这可能是一个问题。
我认为您在这里关心的是最小化 IO,我不确定这个解决方案是否真的有那么大的帮助,因为您将迭代一个集合两次。如果您需要返回并一遍又一遍地读取同一个文件,那么将文件缓存在内存中肯定会加快速度,但也有同样简单的方法可以做到这一点,例如内存映射文件和使用普通文件访问。如果您真的很担心,请尝试分析这样的解决方案,而不是在从 IO 读取时直接处理文件。