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.
Contenido |
[editar] 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
|
|
[editar] 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) |
[editar] Objetos miembro
Nombre del miembro | Definición |
current (private)
|
Una copia del iterador base(), el nombre es solo para exposición. |
[editar] 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) |
[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: "" "" "" ""
[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 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 |
[editar] 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) |