c++ - 读取文件头

标签 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 检查。我该怎么做?

最佳答案

当然你可以这样做::

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/

相关文章:

c++ - 为什么 c++ 程序员使用 != 而不是 <

c++ - int 的最大值

c++ - 在 C++ 中解析字符串,使用 char 数据类型

c++ - 使用模板化可变模板参数作为专用参数

c++ - 如何根据模板类型使用 std::enable_if 来启用或禁用构造函数?

C++简单类

c++ - 旧显示驱动程序上奇怪的 CUDA 内核结果

c++11 - 如何避免模板实例化和符号表导致的C++代码膨胀?

c++ - 为什么我不能模板重载?

c++ - 我可以列表初始化一个只 move 类型的 vector 吗?