std::move_iterator
| 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
|
| ||||
iterator_concept(desde C++20) |
std::input_iterator_tag | ||||
value_type
|
| ||||
difference_type
|
| ||||
pointer
|
Iter
| ||||
reference
|
|
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) | |
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) | |
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) | |
| accede al elemento apuntado (función miembro pública) | |
| obtiene la referencia rvalue al elemento indexado (función miembro pública) | |
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) |
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) | |
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) | |
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) | |
(C++20) |
Convierte el resultado de desreferenciar el iterador subyacente a su tipo referencia rvalue asociado (plantilla de función) |
(C++20) |
Intercambia los objetos a los que apuntan dos iteradores subyacentes (plantilla de función) |
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 pendientesi desreferenciar el iterador subyacente devuelve un prvalue |
En su lugar devuelve el objeto |
Véase también
(C++11) |
Crea un std::move_iterator del tipo inferido a partir del argumento. (plantilla de función) |
(C++20) |
Adaptador de centinela para uso con std::move_iterator (plantilla de clase) |