2016-02-03 1 views
1

Я недавно написал реализацию для простого связанного списка, и в нескольких точках в моем коде это выглядит какЧитаемости для петель без счетчиков

Node* current_node = head; 
while (current_node != nullptr) { 
    if (current_node->data == query) { 
    // perform some action 
    break; 
    } 
current_node = current_node->next; 
} 

И я только недавно думал, что я мог бы повторно реализовать это как

for (Node* current_node = head; current_node != nullptr; current_node = current_node->next) { 
    if (current_node->data == query) { 
    // perform some action 
    break; 
    } 
} 

Я знаю, что и синтаксически правильно, и что любые различия в производительности должны быть незначительными, но мне было интересно, если они имеют условие равенства в чеке, как правило, осуществляется в для цикла? Раньше я использовал только неравенства (ex:>, < и т. Д.) Для for-loops. Какая версия более условна/удобочитаема?

+0

Оба имеют проверки равенства, в чем разница w.r.t названия вашего вопроса? Проверка равенства полностью прекрасна, и использование цикла for, а не эквивалентного цикла while, вероятно, проще для большинства людей читать. Разницы в производительности нет. Делайте то, что вы считаете самым легким для чтения и правильным. – GManNickG

+2

'current_node-> data! = Query' может быть полностью в условии цикла. Просто '&&' it. Затем вы просто используете 'current_node' после цикла. – LogicStuff

+0

@LogicStuff. Имеет ли значение, что 'current_node-> data' приведет к недопустимому чтению, если' current_node == nullptr' или будет покрываться упорядочением оператора '&&'? – Aposhian

ответ

0

Это не плохая практика, чтобы перебрать связанный список с помощью for цикла, но вы можете улучшить его:

std::list<type> list; 
auto it = std::find(begin(list), end(list), query); 
if (it != end(list)) 
    // perform some action 
+0

Спасибо, но целью этого кода было практическое определение моего контейнера с нуля. В противном случае я бы использовал std :: list. – Aposhian

+0

@ Апошян Рад это услышать. – Shoe

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

  • Нет связанных вопросов^_^