我有一个类似于下面的文件
@
@
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检查。我怎么能这样做?
答案 0 :(得分:1)
当然你可以做一些像::
这样的事情do{
getline(in, line);
}while(line[0] == '@')
do{
//do something with line
}while(/* not EOF*/)
但您可能也对着名的answer about branch prediction感兴趣。它基本上告诉你处理器通常非常擅长"猜测" if语句的正确结果,特别是如你所说的那样,在几行后结果总是相同的。因此,您的版本不仅应该具有相同的速度,而且如果有另一行以' @'稍后在你的文件中。
答案 1 :(得分:0)
Anedar是对的,你也可以这样做:
string line;
while(getline(in, line))
{
if(line[0] == '@'){
continue;
//do something
}
else{
break;
}
}
有些人喜欢做/ while循环,有些人不喜欢,无论你的船是浮动的还是你写的标准。 :)