◐ Shell
clean mode source ↗

std::move_iterator - cppreference.com

De cppreference.com

Definido en el archivo de encabezado <iterator>

template< class Iter > class move_iterator;

(desde C++11)

std::move_iterator es un adaptador de iterador que se comporta exactamente igual que el iterador subyacente (que debe ser al menos un InputIterator o modelar a input_iterator (desde C++20)), excepto que desreferenciarlo convierte el valor devuelto por el iterador subyacente a un rvalue. Si este iterador se utiliza como un iterador de entrada, el efecto es que los valores se mueven de él, en lugar de copiarse de él.

Tipos miembro

Tipo miembro Definición
iterator_type Iter
iterator_category

std::iterator_traits<Iter>::iterator_category

(hasta C++20)

Si std::iterator_traits<Iter>::iterator_category modela std::derived_from<std::random_access_iterator_tag>, esto es std::random_access_iterator_tag. De lo contrario, esto es std::iterator_traits<Iter>::iterator_category sin cambiar

(desde C++20)
iterator_concept
(desde C++20)
std::input_iterator_tag
value_type

std::iterator_traits<Iter>::value_type

(hasta C++20)

std::iter_value_t<Iter>

(desde C++20)
difference_type

std::iterator_traits<Iter>::difference_type

(hasta C++20)

std::iter_difference_t<Iter>

(desde C++20)
pointer Iter
reference

Si std::iterator_traits<Iter>::reference es una referencia, esto es, la versión referencia rvalue del mismo tipo. De lo contrario, (como cuando el iterador envuelto devuelve por valor), esto es std::iterator_traits<Iter>::reference sin cambiar

(hasta C++20)

std::iter_rvalue_reference_t<Iter>

(desde C++20)

Funciones miembro

construye un nuevo adaptador iterador

Original:

constructs a new iterator adaptor

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.


(función miembro pública) [editar]

asigna otro iterador

Original:

assigns another iterator

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.


(función miembro pública) [editar]

accede el iterador subyacente

Original:

accesses the underlying iterator

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.


(función miembro pública) [editar]
accede al elemento apuntado
(función miembro pública) [editar]
obtiene la referencia rvalue al elemento indexado
(función miembro pública) [editar]

avances o disminuye el iterador

Original:

advances or decrements the iterator

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.


(función miembro pública) [editar]

Objetos miembro

Nombre del miembro Definición
current (private) Una copia del iterador base(), el nombre es solo para exposición.

Funciones no miembro

Plantilla:cpp/iterator/move iterator/dsc operator cmp2Plantilla:cpp/iterator/move iterator/dsc operator-2

compara los iteradores subyacentes
(plantilla de función) [editar]

avanza el iterador

Original:

advances the iterator

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.


(plantilla de función) [editar]

calcula la distancia entre dos adaptadores iterador

Original:

computes the distance between two iterator adaptors

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.


(plantilla de función) [editar]
Convierte el resultado de desreferenciar el iterador subyacente a su tipo referencia rvalue asociado
(plantilla de función) [editar]
Intercambia los objetos a los que apuntan dos iteradores subyacentes
(plantilla de función) [editar]

Ejemplo

#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
#include <numeric>
#include <string>

int main()
{
    std::vector<std::string> v{"esto", "es", "un", "ejemplo"};

    std::cout << "Viejo contenido del vector: ";
    for (auto& s : v)
        std::cout << '"' << s << "\" ";

    typedef std::vector<std::string>::iterator iter_t;
    std::string concat = std::accumulate(
                             std::move_iterator<iter_t>(v.begin()),
                             std::move_iterator<iter_t>(v.end()),
                             std::string());  // puede simplificarse con std::make_move_iterator

    std::cout << "\nConcatenado como una cadena: " << concat << '\n'
              << "Nuevo contenido del vector: ";
    for (auto& s : v)
        std::cout << '"' << s << "\" ";
    std::cout << '\n';
}

Posible salida:

Viejo contenido del vector: "esto" "es" "un" "ejemplo"
Concatenado como una cadena: estoesunejemplo
Nuevo contenido del vector: "" "" "" ""

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 2106 C++11 Desreferenciar un move_iterator podía devolver una referencia pendiente
si desreferenciar el iterador subyacente devuelve un prvalue
En su lugar devuelve el objeto

Véase también