Я недавно написал реализацию для простого связанного списка, и в нескольких точках в моем коде это выглядит какЧитаемости для петель без счетчиков
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. Какая версия более условна/удобочитаема?
Оба имеют проверки равенства, в чем разница w.r.t названия вашего вопроса? Проверка равенства полностью прекрасна, и использование цикла for, а не эквивалентного цикла while, вероятно, проще для большинства людей читать. Разницы в производительности нет. Делайте то, что вы считаете самым легким для чтения и правильным. – GManNickG
'current_node-> data! = Query' может быть полностью в условии цикла. Просто '&&' it. Затем вы просто используете 'current_node' после цикла. – LogicStuff
@LogicStuff. Имеет ли значение, что 'current_node-> data' приведет к недопустимому чтению, если' current_node == nullptr' или будет покрываться упорядочением оператора '&&'? – Aposhian