Избегайте повторных вычислений в циклах

Не выполняйте избыточные вычисления в циклах, если они гарантированно возвращают одни и те же значения (не изменяются в в пределах цикла).

Например, в условиях циклов не вызывайте функции для подсчёта количества итераций на каждом шаге. Вместо этого заранее сохраните это значение в переменную.

Плохой пример:

Values values;

for (size_t i = 0; i < values.size(); ++i) {
    // ...
}

Правильно:

for (size_t i = 0, count = values.size(); i < count; ++i) {
    // ...
}

или еще лучше использовать range-for циклы

for (const auto& value: values) {
    // ...
}

На самом деле, в примере выше, если size является тривиальным inline-методом (возвращает разницу указателей или значение поля), то любой современный компилятор выполнит необходимые оптимизации - вынесет вызов за пределы цикла (loop-invariant code motion), а для таких контейнеров как std::vector метод size() стандарт гарантирует O(1), и компилятор это знает.