Соглашение о проверке петли

Если я проходил цикл, скажем, итерацию по вектору, и я не хочу выполнять действие с каким-либо элементом в векторе, я могу сделать это двумя способами:

Это тот, который я предпочитаю использовать:

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
}
}
}

Я знаю, что в окончательных результатах нет абсолютно никакой разницы. Однако есть ли какая-то разница под капотом, поскольку второй способ открывает новую область для выполнения? Любой из этих двух предпочтительнее другого?

Спасибо

0

Решение

Как указано в моем комментарии, на личном уровне я предпочитаю первую реализацию с использованием continue для предотвращения ненужного вложения кода и создания области видимости.

Единственное снижение производительности каждого из них, в дополнение к нормальному коду, который будет реализован, — это оценка выражения в if-statement, Поскольку оба они содержат выражение для оценки, они одинаковы по производительности.

Если вы думаете о том, как это скомпилировано, для C / C ++ это прямо в ассемблерный код. На этом уровне, независимо от того, как вы вкладываете код, он компилируется в простой jmp а также cmp команды. Поэтому, независимо от реализации, при компиляции у вас будет один и тот же код сборки.

В любом случае, это микро-микро-оптимизация, если она вообще есть! Делайте то, что предпочитаете для форматирования и оформления кода.

2

Другие решения

Других решений пока нет …