Ось ще одна відповідь, яку, схоже, ще ніхто не придумав. forпетлі слід використовувати, коли вам потрібно перебирати послідовність . Використання !=є найбільш стислим методом констатації умови завершення циклу. Однак використання менш обмежувального оператора є дуже поширеною ідіомою захисного програмування. Для цілих чисел це не має значення - це лише особистий вибір без конкретнішого прикладу. Перебираючи колекції за допомогою ітераторів, які ви хочете використовувати, !=з інших причин. Якщо ви розглядаєте послідовності floatабо double, ви хочете уникнути !=будь-якої ціни.
Що я хотів зазначити, це те, що forвикористовується, коли вам потрібно перебирати послідовність. Сформована послідовність має початкову точку, інтервал та закінчувальну умову. Вони коротко визначені в forзаяві. Якщо ви виявите, що (1) не включає ступінчасту частину forабо (2), вказуючи щось на зразок trueумови захисту, тоді вам не слід використовувати forцикл!
whileЦикл використовуються для продовження обробки в той час як стан конкретного задовольняються. Якщо ви не обробляєте послідовність, то, ймовірно, whileзамість цього ви хочете цикл. Аргументи умови збереження тут подібні, але рішення між a whileі forциклом повинно бути дуже свідомим. whileЦикл недооцінюваний в колах C ++ ІМА.
Якщо ви обробляєте колекцію предметів (дуже поширене forвикористання у циклі), то вам дійсно слід скористатися більш спеціалізованим методом. На жаль, 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 */ }