Если вы не делаете это и миллионы раз в секунду (и серьезно, почему будет вас?), Это не будет иметь никакого значения.
Если вам действительно интересно, проверьте это. Установите цикл в несколько миллионов раз и посмотрите, сколько времени займет каждый.
Я думаю, вы обнаружите, что разница незначительна.
Было бы гораздо лучше сконцентрироваться на проблемах макрооптимизации, таких как выбор алгоритма, и оптимизировать такого рода вещи для читабельности.
И, в любом случае, оптимизация для удобочитаемости является допустимым подходом, и я обычно использую его, если нет серьезных узких мест в производительности. Другими словами, используйте empty()
или !empty()
, если вы делаете что-то, основываясь на том, пусто оно или нет. Любая другая проверка размера (например, если в ней хотя бы двенадцать элементов) должна использовать size()
(очевидно).
В качестве примера того, насколько бесполезными могут быть некоторые микрооптимизации, рассмотрим код на C:
#include <stdio.h>
int main(void) {
int i, j, k, diff;
for (i = 0; i < 1000; i++)
for (j = 0; j < 1000000; j++)
//diff = (i == j);
diff = (i - j);
return 0;
}
Когда я компилирую это с оптимизацией по умолчанию (a) и запускаю его с помощью команды time
, я получаю время ЦП (более пяти запусков) с одной из этих строк без комментариев:
diff = (i - j) diff = (i == j)
============== ===============
2.488 2.216
2.424 2.220
2.452 2.224
2.484 2.152
2.464 2.152
===== =====
Avrgs: 2.463 2.193
Теперь этот первый вариант медленнее на 12%, но есть одна вещь, которую вам нужно понять. Несмотря на то, что он медленнее, это заняло всего две секунды, миллиардов раз. Если вы делаете это один раз, разница между 0,000000002463 секундами и 0,000000002193 секундами, не стоит усилий по оптимизации.
Выбирай свои сражения, нацеливайся на оптимизацию. Вы можете получить значительное улучшение скорости с помощью стратегий макро-оптимизации.
(a) При gcc
"безумном" уровне оптимизации -O3
они оба занимают 0,000 секунд (иногда 0,004, но редко - насколько я понимаю, есть ограничение на разрешение time
команда), делая разницу еще более неактуальной: -)