Espacios de nombres
Variantes
Acciones

std::make_move_iterator

De cppreference.com
< cpp‎ | iterator
 
 
Biblioteca de iteradores
Conceptos de iteradores
Primitivas de iteradores
Conceptos de algoritmos y servicios
Conceptos invocables indirectos
Requerimientos comunes de algoritmos
Servicios
Adaptadores de iteradores
Iteradores de flujos
Puntos de personalización de iteradores
Operaciones de iteradores
(C++11)
(C++11)
Acceso a rangos
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
Definido en el archivo de encabezado <iterator>
template< class Iter >
std::move_iterator<Iter> make_move_iterator( Iter i );
(desde C++11)
(hasta C++17)
template< class Iter >
constexpr std::move_iterator<Iter> make_move_iterator( Iter i );
(desde C++17)

make_move_iterator es una plantilla de función de conveniencia que construye un std::move_iterator para el iterator i dado con el tipo deducido a partir del tipo del argumento.

Contenido

[editar] Parámetros

i - Iterador de entrada a ser convertido a un iterador de movimiento.

[editar] Valor de retorno

Un std::move_iterator que se puede utilizar para mover los elementos accedidos a través de i.

[editar] Posible implementación

template< class Iter >
constexpr std::move_iterator<Iter> make_move_iterator( Iter i )
{
    return std::move_iterator<Iter>(std::move(i));
}

[editar] Ejemplo

#include <iostream>
#include <list>
#include <vector>
#include <string>
#include <iterator>
int main()
{
    std::list<std::string> s{"uno", "dos", "tres"};
 
    std::vector<std::string> v1(s.begin(), s.end()); // copy
 
    std::vector<std::string> v2(std::make_move_iterator(s.begin()),
                                std::make_move_iterator(s.end())); // mueve
 
    std::cout << "v1 ahora contiene: ";
    for(auto str : v1)
            std::cout << "\"" << str << "\" ";
    std::cout << "\nv2 ahora contiene: ";
    for(auto str : v2)
            std::cout << "\"" << str << "\" ";
    std::cout << "\nlista original ahora contiene: ";
    for(auto str : s)
            std::cout << "\"" << str << "\" ";
    std::cout << '\n';
}

Salida:

v1 ahora contiene: "uno" "dos" "tres"
v2 ahora contiene: "uno" "dos" "tres"
lista original ahora contiene: "" "" ""

[editar] Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 2061 C++11 make_move_iterator no convertía argumentos de tipo
array a punteros
Se hizo que los convirtiera

[editar] Véase también

Adaptador de iterador que se desreferencia a una referencia rvalue.
(plantilla de clase) [editar]
(C++11)
Obtiene una referencia r-valor
(plantilla de función) [editar]