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
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 <<"\" "; typedefstd::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) |