std::counted_iterator::operator++,+,+=,--,-,-= - cppreference.com (original) (raw)

constexpr counted_iterator& operator++(); (1) (since C++20)
constexpr decltype(auto) operator++( int ); (2) (since C++20)
constexpr counted_iterator operator++( int ) requires std::forward_iterator<I>; (3) (since C++20)
constexpr counted_iterator& operator--() requires std::bidirectional_iterator<I>; (4) (since C++20)
constexpr counted_iterator operator--( int ) requires std::bidirectional_iterator<I>; (5) (since C++20)
constexpr counted_iterator operator+( std::iter_difference_t<I> n ) const requires std::random_access_iterator<I>; (6) (since C++20)
constexpr counted_iterator& operator+=( std::iter_difference_t<I> n ) requires std::random_access_iterator<I>; (7) (since C++20)
constexpr counted_iterator operator-( std::iter_difference_t<I> n ) const requires std::random_access_iterator<I>; (8) (since C++20)
constexpr counted_iterator& operator-=( std::iter_difference_t<I> n ) requires std::random_access_iterator<I>; (9) (since C++20)

Increments or decrements the underlying iterator _current_ and the distance to the end _length_.

The behavior of these functions is undefined if the _length_ would be set to a minus value.

  1. Pre-increments by one. Equivalent to ++current; --length; return *this;.

  2. Post-increments by one. Equivalent to --length; try { return current++; } catch(...) { ++length; throw; }.

  3. Post-increments by one. Equivalent to counted_iterator temp{*this}; ++*this; return temp;.

  4. Pre-decrements by one. Equivalent to --current; ++length; return *this;.

  5. Post-decrements by one. Equivalent to counted_iterator temp{*this}; --*this; return temp;.

  6. Returns an iterator adaptor which is advanced by n. Equivalent to return counted_iterator(current + n, length - n);.

  7. Advances the iterator adaptor by n. Equivalent to current += n; length -= n; return *this;.

  8. Returns an iterator adaptor which is advanced by -n. Equivalent to return counted_iterator(current - n, length + n);.

  9. Advances the iterator adaptor by -n. Equivalent to current -= n; length += n; return *this;.

[edit] Parameters

n - the number of positions to increment or decrement the iterator adaptor

[edit] Return value

  1. *this

2,3) A copy of *this that was made before the change.

  1. *this

  2. A copy of *this that was made before the change.

  3. An iterator adaptor which is advanced by n.

  4. *this

  5. An iterator adaptor which is advanced by -n.

  6. *this

[edit] Example

#include #include #include   int main() { const auto v = {1, 2, 3, 4, 5, 6}; std::counted_iterator<std::initializer_list::iterator> it1{v.begin(), 5};   ++it1; assert(*it1 == 2 && it1.count() == 4); // (1) auto it2 = it1++; assert(*it2 == 2 && *it1 == 3); // (3) --it1; assert(*it1 == 2 && it1.count() == 4); // (4) auto it3 = it1--; assert(*it3 == 2 && *it1 == 1); // (5) auto it4 = it1 + 3; assert(*it4 == 4 && it4.count() == 2); // (6) auto it5 = it4 - 3; assert(*it5 == 1 && it5.count() == 5); // (8) it1 += 3; assert(*it1 == 4 && it1.count() == 2); // (7) it1 -= 3; assert(*it1 == 1 && it1.count() == 5); // (9) }

[edit] See also

| | advances the iterator (function template) [edit] | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | | computes the distance between two iterator adaptors (function template) [edit] |