Если я проходил цикл, скажем, итерацию по вектору, и я не хочу выполнять действие с каким-либо элементом в векторе, я могу сделать это двумя способами:
Это тот, который я предпочитаю использовать:
vector<int> vec;
void loopFunction(int toIgnore) {
for (size_t index = 0; index < vec.size(); index++) {
if (vec[index] == toIgnore) continue;
// do stuff
}
}
Это тот, который я вижу, большинство людей используют:
vector<int> vec;
void loopFunction(int toIgnore) {
for (size_t index = 0; index < vec.size(); index++) {
if (vec[index] != toIgnore) {
// do stuff
}
}
}
Я знаю, что в окончательных результатах нет абсолютно никакой разницы. Однако есть ли какая-то разница под капотом, поскольку второй способ открывает новую область для выполнения? Любой из этих двух предпочтительнее другого?
Спасибо
Как указано в моем комментарии, на личном уровне я предпочитаю первую реализацию с использованием continue
для предотвращения ненужного вложения кода и создания области видимости.
Единственное снижение производительности каждого из них, в дополнение к нормальному коду, который будет реализован, — это оценка выражения в if-statement
, Поскольку оба они содержат выражение для оценки, они одинаковы по производительности.
Если вы думаете о том, как это скомпилировано, для C / C ++ это прямо в ассемблерный код. На этом уровне, независимо от того, как вы вкладываете код, он компилируется в простой jmp
а также cmp
команды. Поэтому, независимо от реализации, при компиляции у вас будет один и тот же код сборки.
В любом случае, это микро-микро-оптимизация, если она вообще есть! Делайте то, что предпочитаете для форматирования и оформления кода.
Других решений пока нет …