Подтвердить что ты не робот

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

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

std::set<sometype> s;

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

Ответ 1

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

Ответ 2

От http://www.sgi.com/tech/stl/insert_iterator.html

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