Daily bit(e) C++. std::front_inserter, std::back_inserter, std::inserter

Добавлено 7 сентября 2026 в 02:43

Daily bit(e) C++ 99, адаптеры итераторов, вставляющие элементы в диапазоны: std::front_inserter, std::back_inserter, std::inserter.

Daily bit(e) C++

Предварительное выделение емкости для элементов, как правило, является оптимальным подходом с точки зрения производительности. Однако это усложняет код, и мы можем не знать количество элементов заранее.

Адаптеры вставки решают эту проблему, адаптируя целевой диапазон и вызывая push_back (back_inserter), push_front (front_inserter) или insert (inserter) при каждой записи.

#include <algorithm>
#include <vector>
#include <list>

std::vector<int> src{1, 2, 3};
std::list<int> dst{4};

std::copy(src.begin(), src.end(), std::back_inserter(dst));
// dst == {4, 1, 2, 3}

std::copy(src.begin(), src.end(), std::front_inserter(dst));
// dst = {3, 2, 1, 4, 1, 2, 3}

std::copy(src.begin(), src.end(), 
    std::inserter(dst, std::next(dst.begin())));
// dst = {3, 1, 2, 3, 2, 1, 4, 1, 2, 3}

// Обратите внимание, inserter не следует использовать с целевыми
// диапазонами, которые при вставки делают итераторы недействительными.

Пример на Compiler Explorer

Теги

C++ / CppDaily bit(e) C++Программирование