Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

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  con-
       structs 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 <iostream>
	#include <iomanip>
	#include <list>
	#include <vector>
	#include <string>
	#include <iterator>

	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
       Correct 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 ref-
       erence
	  (C++11)	(class template)
	  move		obtains	an rvalue reference
	  (C++11)	(function template)

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

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::make_move_iterator&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help