读取带标头的文件

Reading file with header

本文关键字:文件 读取      更新时间:2023-10-16

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

@
@
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*/)

但您可能也对有关分支预测的著名答案感兴趣。它基本上告诉你,处理器通常非常擅长"猜测"if语句的正确结果,特别是如果,正如你所说,在几行之后,结果总是相同的。因此,您的版本不仅应该具有几乎相同的速度,而且还应该有效,以防文件后面有另一行以"@"开头。

Anedar 是正确的,你也可以这样做:

string line;
while(getline(in, line)) 
{
    if(line[0] == '@'){
        continue;
        //do something
    }
    else{
        break;
    }
}
有些人

喜欢do/while循环,有些人不喜欢,无论什么漂浮你的船,或者是你写的标准。 :)