用标题读取文件

时间:2016-02-20 20:36:25

标签: c++ c++11

我有一个类似于下面的文件

@
@
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检查。我怎么能这样做?

2 个答案:

答案 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循环,有些人不喜欢,无论你的船是浮动的还是你写的标准。 :)