Недавно я натолкнулся на следующий код.Преимущество вычисления map.end() вне цикла
std::map<int, int> m;
// insert into the map
std::map<int, int>::iterator endOfMap = m.end();
for(std::map<int, int>::iterator itr = m.begin(); itr != endOfMap; ++itr) {
}
Есть ли какое-либо преимущество в вычислении endOfMap заранее на нижнем уровне?
for(std::map<int, int>::iterator itr = m.begin(); itr != m.end(); ++itr)
Примечание:
код я увидел отображение строки для пользовательского объекта, с миллионами элементов.
Ну, они, вероятно, будут так близки к скорости вычислений, но давайте возьмем первый пример, первый из которых уже вычисляет вызов функции и делает все, что ему нужно, до endOfMap. 2-й пример в условии завершения, он будет вызывать функцию m.end() несколько раз, а затем проверить, являются ли они равными или нет. Вместо того, чтобы просто проверить, не равны ли они и не вызывать функцию несколько раз. –
Вы говорите об O (конец()) + O (проверка равенства) по сравнению с O (проверка равенства) в итерациях цикла for. –
Снижение производительности при распределении памяти данных карты перевешивает любое улучшение от вызывающего конца() вне цикла! – user997112