home | help
std::make_move_iterator(3)     C++ Standard Libary    std::make_move_iterator(3)

NAME
     std::make_move_iterator - std::make_move_iterator

Synopsis
	Defined in header <iterator>
	template< class Iter >						  (since
     C++11)
	std::move_iterator<Iter> make_move_iterator( Iter i );		  (until
     C++17)
	template< class Iter >						  (since
     C++17)
	constexpr std::move_iterator<Iter> make_move_iterator( Iter i );

	make_move_iterator is a convenience function template that constructs a
	std::move_iterator  for  the given iterator i with the type deduced from
     the type of
	the argument.

Parameters
	i - input iterator to be converted to move iterator

Return value
	A std::move_iterator which can be used to move	from  the  elements  ac-
     cessed through i.

Possible implementation
	template<class Iter>
	constexpr std::move_iterator<Iter> make_move_iterator(Iter i)
	{
	    return std::move_iterator<Iter>(std::move(i));
	}

Example
     // Run this code

      #include <iomanip>
      #include <iostream>
      #include <iterator>
      #include <list>
      #include <string>
      #include <vector>

      auto print = [](auto const rem, auto const& seq)
      {
	  for (std::cout << rem; auto const& 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()); // copy

	  std::vector<std::string> v2(std::make_move_iterator(s.begin()),
				      std::make_move_iterator(s.end())); // move

	  print("v1 now holds: ", v1);
	  print("v2 now holds: ", v2);
	  print("original list now holds: ", s);
      }

Possible output:
      v1 now holds: "one" "two" "three"
      v2 now holds: "one" "two" "three"
      original list now holds: "" "" ""

	Defect reports

	The  following	behavior-changing  defect  reports were applied retroac-
     tively to
	previously published C++ standards.

	   DR	 Applied to		 Behavior as published		    Cor-
     rect behavior
	LWG 2061 C++11	    make_move_iterator did not convert array	    made
     to convert
			    arguments to pointers

See also
	move_iterator iterator adaptor which dereferences to an rvalue
	(C++11)       (class template)
	move	      obtains an rvalue reference
	(C++11)       (function template)

http://cppreference.com 	   2024.06.10	      std::make_move_iterator(3)

home | help