读取带标头的文件
Reading file with header
我有一个类似于下面的文件
@
@
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循环,有些人不喜欢,无论什么漂浮你的船,或者是你写的标准。 :)
相关文章:
- 正在将csv文件读取为双精度矢量
- 将从格式化文本文件读取的文本数据存储到链表
- C++ 读取文件读取文件不正确
- 使用对象文件读取三角形数据网格
- 如何减慢从 BVH 文件读取的 opengl 动画?
- 从文件读取,并写入函数C++中的数组
- 从对象C++中的文件读取内容时出现分段错误
- 从文件读取并通过矢量输出到控制台
- 尝试将字符串从文件读取到无符号字符向量中
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 简化文件读取的函数
- 如何将逗号分隔的文件读取为 2D int 数组?
- 在 c++ 中将数据从文件读取到队列中
- 'std::wstring_convert'尽可能多地转换(从 UTF8 文件读取块)
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 文件读取C++包括空格键
- 从文件读取时未将值推回矢量
- 从文件 C++ 读取时的无限循环
- 从同一文件读取和写入?
- 从.txt文件读取到C++中的双精度向量