Вот еще один ответ, который, кажется, еще никто не придумал. forЦиклы следует использовать, когда вам нужно перебрать последовательность . Использование !=является наиболее кратким методом определения условия завершения цикла. Однако использование менее строгого оператора является очень распространенной идиомой защитного программирования. Для целых чисел это не имеет значения - это просто личный выбор без более конкретного примера. Цикл по коллекциям с итераторами, которые вы хотите использовать !=по причинам, указанным другими. Если вы считаете последовательности floatили double, то вы хотите избежать !=любой ценой.
Я хотел бы отметить, что forон используется, когда вам нужно перебрать последовательность. Сгенерированная последовательность имеет начальную точку, интервал и условие завершения. Они кратко указаны в forзаявлении. Если вы обнаружите, что либо (1) не включает шаговую часть forили (2), указав что-то вроде trueусловия охраны, то вам не следует использовать forцикл!
whileЦикл используются для продолжения обработки в то время как состояние конкретного удовлетворяются. Если вы не обрабатываете последовательность, то, скорее всего, вам нужен whileцикл. Аргументы охранного условия здесь аналогичны, но решение между a whileи forциклом должно быть очень осознанным. whileЦикл недооцениваемый в кругах C ++ ИМА.
Если вы обрабатываете коллекцию элементов (очень распространенное forиспользование -loop), то вам действительно следует использовать более специализированный метод. К сожалению, std::for_eachэто довольно болезненно в C ++ по ряду причин. Во многих случаях отделение тела forпетли в отдельно стоящей функции (хотя и несколько болезненно) приводит к гораздо более чистому решению. При работе с коллекциями, рассмотрим std::for_each, std::transformили std::accumulate. Реализация многих алгоритмов становится лаконичной и кристально ясной, когда выражается таким образом. Не говоря уже о том, что выделение тела цикла в отдельную функцию / метод заставляет вас сосредоточиться на алгоритме, его входных требованиях и результатах.
Если вы используете Java, Python, Ruby или даже C ++ 0x , вы должны использовать правильный цикл foreach для коллекции . По мере того как компиляторы C ++ реализуют эту функцию, ряд forциклов исчезнет, как и обсуждения этого типа.
int i = 10; while(i --> 0) { /* stuff */ }