End() может быть дорогостоящей операцией для контейнеров stl

На https://doc-snapshots.qt.io/qtcreator-extending/coding-style.htmlрекомендуется писать для циклов вида следующее:

Container::iterator end = large.end();
for (Container::iterator it = large.begin(); it != end; ++it) {
        //...;
}

вместо

for (Container::iterator it = large.begin(); it != large.end(); ++it) {
        //...;
}

Поскольку я редко встречал этот стиль в любом коде, я хотел бы знать, действительно ли последовательный вызов end() добавляет заметные накладные расходы во время выполнения для больших циклов по контейнерам stl или оптимизируют ли уже компиляторы такие случаи.

Редактировать: Как отмечают многие из очень хороших комментариев: этот вопрос действителен только в том случае, если код внутри цикла не изменяет конечный итератор. В противном случае конечно повторный вызов end обязателен.

19
задан MBach 14 January 2017 в 00:33
поделиться