std:: make_move_iterator
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definido en el encabezado
<iterator>
|
||
|
template
<
class
Iter
>
std:: move_iterator < Iter > make_move_iterator ( Iter i ) ; |
(desde C++11)
(constexpr desde C++17) |
|
make_move_iterator
es una función de conveniencia que construye un
std::move_iterator
para el iterador dado
i
con el tipo deducido del tipo del argumento.
Contenidos |
Parámetros
| i | - | iterador de entrada a convertir en iterador de movimiento |
Valor de retorno
std:: move_iterator < Iter > ( std :: move ( i ) )
Ejemplo
#include <iomanip> #include <iostream> #include <iterator> #include <list> #include <string> #include <vector> auto print = [](const auto rem, const auto& seq) { for (std::cout << rem; const auto& str : seq) std::cout << std::quoted(str) << ' '; std::cout << '\n'; }; int main() { std::list<std::string> s{"one", "two", "three"}; std::vector<std::string> v1(s.begin(), s.end()); // copia std::vector<std::string> v2(std::make_move_iterator(s.begin()), std::make_move_iterator(s.end())); // movimiento print("v1 ahora contiene: ", v1); print("v2 ahora contiene: ", v2); print("la lista original ahora contiene: ", s); }
Salida posible:
v1 ahora contiene: "one" "two" "three" v2 ahora contiene: "one" "two" "three" la lista original ahora contiene: "" "" ""
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2061 | C++11 |
make_move_iterator
no convertía argumentos de array a punteros
|
modificado para convertir |
Véase también
|
(C++11)
|
adaptador de iterador que se desreferencia a un rvalue
(plantilla de clase) |
|
(C++11)
|
convierte el argumento a un xvalue
(plantilla de función) |