std::move_iterator (3) - Linux Manuals

std::move_iterator: std::move_iterator

NAME

std::move_iterator - std::move_iterator

Synopsis


Defined in header <iterator>
template< class Iter > (since C++11)
class move_iterator;


std::move_iterator is an iterator adaptor which behaves exactly like the underlying iterator (which must be at least an LegacyInputIterator), except that dereferencing converts the value returned by the underlying iterator into an rvalue. If this iterator is used as an input iterator, the effect is that the values are moved from, rather than copied from.

Member types


Member type Definition
iterator_type Iter
difference_type std::iterator_traits<Iter>::difference_type
pointer Iter
value_type std::iterator_traits<Iter>::value_type
iterator_category std::iterator_traits<Iter>::iterator_category


reference value_type&& (until C++17)
                  If std::iterator_traits<Iter>::reference is a reference, this is the rvalue reference version of the same type. Otherwise (such as if the wrapped iterator returns by value), this is std::iterator_traits<Iter>::reference unchanged (since C++17)

Member functions


                      constructs a new iterator adaptor
constructor (public member function)
                      assigns another iterator
operator= (public member function)
                      accesses the underlying iterator
base (public member function)


operator*
operator-> accesses the pointed-to element
                      (public member function)


(deprecated in C++20)
                      accesses an element by index
operator[] (public member function)


operator++
operator++(int)
operator+= advances or decrements the iterator
operator+ (public member function)
operator--
operator--(int)
operator-=
operator-

Member objects


Member name Definition
current (private) a copy of the base() iterator, the name is for exposition only

Non-member functions


operator==
operator!= compares the underlying iterators
operator< (function template)
operator<=
operator>
operator>=
           advances the iterator
operator+ (function template)
           computes the distance between two iterator adaptors
operator- (function template)

Example


// Run this code


  #include <iostream>
  #include <algorithm>
  #include <vector>
  #include <iterator>
  #include <numeric>
  #include <string>


  int main()
  {
      std::vector<std::string> v{"this", "is", "an", "example"};


      std::cout << "Old contents of the 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()); // Can be simplified with std::make_move_iterator


      std::cout << "\nConcatenated as string: " << concat << '\n'
                << "New contents of the vector: ";
      for (auto& s : v)
          std::cout << '"' << s << "\" ";
      std::cout << '\n';
  }

Possible output:


  Old contents of the vector: "this" "is" "an" "example"
  Concatenated as string: thisisanexample
  New contents of the vector: "" "" "" ""

See also


make_move_iterator creates a std::move_iterator of type inferred from the argument
                   (function template)
(C++11)