Namespaces
Variants
Views
Actions

std::move_iterator

From cppreference.com
< cpp‎ | iterator
 
 
Iterator library
Iterator concepts
(C++20)
(C++20)
(C++20)
(C++20)
Iterator primitives
Iterator adaptors
Stream iterators
Iterator customization points
Iterator operations
(C++11)
(C++11)
Range access
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
 
Defined in header <iterator>
template< class Iter >
class move_iterator;
(since C++11)

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.

Contents

[edit] Member types

Member type Definition
iterator_type Iter
iterator_category

std::iterator_traits<Iter>::iterator_category

(until C++20)

If std::iterator_traits<Iter>::iterator_category models std::DerivedFrom<std::random_access_iterator_tag>, this is std::random_access_iterator_tag. Otherwise, this is std::iterator_traits<Iter>::iterator_category unchanged

(since C++20)
iterator_concept
(since C++20)
std::input_iterator_tag
value_type

std::iterator_traits<Iter>::value_type

(until C++20)

std::iter_value_t<Iter>

(since C++20)
difference_type

std::iterator_traits<Iter>::difference_type

(until C++20)

std::iter_difference_t<Iter>

(since C++20)
pointer Iter
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)
(until C++20)

std::iter_rvalue_reference_t<Iter>

(since C++20)

[edit] Member functions

constructs a new iterator adaptor
(public member function) [edit]
assigns another iterator
(public member function) [edit]
accesses the underlying iterator
(public member function) [edit]
(deprecated in C++20)
accesses the pointed-to element
(public member function) [edit]
accesses an element by index
(public member function) [edit]
advances or decrements the iterator
(public member function) [edit]

[edit] Member objects

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

[edit] Non-member functions

compares the underlying iterators
(function template) [edit]
compares the underlying iterator and the underlying sentinel
(function template) [edit]
advances the iterator
(function template) [edit]
computes the distance between two iterator adaptors
(function template) [edit]
computes the distance between the underlying iterator and the underlying sentinel
(function template) [edit]
(C++20)
casts the result of dereferencing the underlying iterator to its associated rvalue reference type
(function template) [edit]
(C++20)
swap the objects pointer by two underlying iterators
(function template) [edit]

[edit] Example

#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: "" "" "" ""

[edit] See also

creates a std::move_iterator of type inferred from the argument
(function template) [edit]