我有一个类似于下面的文件
@
@
1 2 3
4 5 6
7 8 9
我想忽略以“@”字符开头的行。我当前用于解析文件的代码很简单。
string line;
while(getline(in, line)) {
if(line[0] == '@')
continue
// do something with line
}
文件中@标记的数量会很小,并且总是出现在文件的开头,但我不想在每次读取后都经过 if 检查。我宁愿在一个单独的函数中读取标题部分,然后开始读取所需的数据而不需要 if 检查。我该怎么做?
最佳答案
当然你可以这样做::
do{
getline(in, line);
}while(line[0] == '@')
do{
//do something with line
}while(/* not EOF*/)
但您可能也对著名的 answer about branch prediction 感兴趣.它基本上告诉您处理器通常非常擅长“猜测” if 语句的正确结果,特别是如果如您所说,在几行之后结果将始终相同。因此,您的版本不仅应该具有几乎相同的速度,而且还应该有效,以防您的文件后面有另一行以“@”开头。
关于c++ - 读取文件头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35528704/