Есть ли разница между использованием.begin() и.end() для std::insertter для std::set?

Есть ли разница между it1 и it2?

std::set<sometype> s;

auto it1 = std::inserter(s, s.begin());
auto it2 = std::inserter(s, s.end());

2 ответа

Решение

На практике не сильно. Если вы вставляете большое количество уже упорядоченных элементов в пустой setВторое будет несколько быстрее, но это все. std::insert_iterator звонки insert с итератором; std::set интерпретирует его как подсказку и вставляет в постоянное время (а не lg n), если вставка находится непосредственно перед подсказкой. (На самом деле, если set пусто, я думаю, что оба будут делать то же самое.)

С http://www.sgi.com/tech/stl/insert_iterator.html

Однако в случае отсортированного ассоциативного контейнера итератор в конструкторе insert_iterator практически не имеет значения. Новые элементы не обязательно образуют непрерывный диапазон; они появятся в соответствующем месте контейнера, в порядке возрастания ключа. Порядок, в котором они вставляются, влияет только на эффективность: вставка уже отсортированного диапазона в отсортированный ассоциативный контейнер является операцией O(N).

Другие вопросы по тегам