2016-02-20 6 views
0

У меня есть файл, похожий на тот, нижеЧтение файла с заголовком

@ 
@ 
1 2 3 
4 5 6 
7 8 9 

Я хочу, чтобы игнорировать строки, начинающиеся с символа «@». Мой текущий код для анализа файла прост.

string line; 
while(getline(in, line)) { 
    if(line[0] == '@') 
     continue 
    // do something with line 
} 

Сумма @ лексем в файле будет небольшой и всегда будет происходить в начале файла, но я не хочу, чтобы пройти через, если проверки после каждого чтения. Я предпочел бы прочитать раздел заголовка в отдельной функции, а затем начать считывать нужные данные без необходимости проверки if. Как я могу это сделать?

ответ

1

Конечно, вы можете сделать что-то вроде ::

do{ 
    getline(in, line); 
}while(line[0] == '@') 

do{ 
    //do something with line 
}while(/* not EOF*/) 

Но вы также можете быть заинтересованы в знаменитом answer about branch prediction. В основном это говорит о том, что процессоры обычно очень хорошо «угадывают» правильный результат if-утверждения, особенно если, как вы сказали, после нескольких строк результат будет всегда одинаковым. Таким образом, ваша версия должна быть не только такой же скоростью, но и действительной, если в вашем файле будет еще одна строка, начинающаяся с «@».

0

Anedar правильно, вы также можете сделать:

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

некоторые люди, как делать/в то время как петли, некоторые нет, все, что плывет лодка или стандарт у вас есть запись с помощью. :)

Смежные вопросы