Ось ще одна відповідь, яку, схоже, ще ніхто не придумав. 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 */ }