Namespaces
Variants

std:: inserter

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
Definido en el encabezado <iterator>
template < class Container >

std:: insert_iterator < Container >

inserter ( Container & c, typename Container :: iterator i ) ;
(hasta C++20)
template < class Container >

constexpr std:: insert_iterator < Container >

inserter ( Container & c, ranges:: iterator_t < Container > i ) ;
(desde C++20)

inserter es una función plantilla de conveniencia que construye un std::insert_iterator para el contenedor c y su iterador i con el tipo deducido del tipo del argumento.

Contenidos

Parámetros

c - contenedor que soporta una operación insert
i - iterador en c que indica la posición de inserción

Valor de retorno

Un std::insert_iterator que puede utilizarse para insertar elementos en el contenedor c en la posición indicada por i .

Implementación posible

template<class Container>
std::insert_iterator<Container> inserter(Container& c, typename Container::iterator i)
{
    return std::insert_iterator<Container>(c, i);
}

Ejemplo

#include <algorithm>
#include <iostream>
#include <iterator>
#include <set>
#include <vector>
int main()
{
    std::multiset<int> s{1, 2, 3};
    // std::inserter se usa comúnmente con multi-conjuntos
    std::fill_n(std::inserter(s, s.end()), 5, 2);
    for (int n : s)
        std::cout << n << ' ';
    std::cout << '\n';
    std::vector<int> d{100, 200, 300};
    std::vector<int> v{1, 2, 3, 4, 5};
    // al insertar en un contenedor de secuencia, el punto de inserción avanza
    // porque cada std::insert_iterator::operator= actualiza el iterador objetivo
    std::copy(d.begin(), d.end(), std::inserter(v, std::next(v.begin())));
    for (int n : v)
        std::cout << n << ' ';
    std::cout << '\n';
}

Salida:

1 2 2 2 2 2 2 3 
1 100 200 300 2 3 4 5

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 561 C++98 el tipo de i era independiente de Container es el tipo iterador de Container

Véase también

adaptador de iterador para inserción en un contenedor
(plantilla de clase)
crea un std::back_insert_iterator del tipo inferido del argumento
(plantilla de función)
crea un std::front_insert_iterator del tipo inferido del argumento
(plantilla de función)