std::counted_iterator<I>::operator++,+,+=,--,-,-=
constexpr counted_iterator& operator++(); | (1) | (с C++20) |
constexpr decltype(auto) operator++( int ); | (2) | (с C++20) |
constexpr counted_iterator operator++( int )
requires std::forward_iterator<I>;
| (3) | (с C++20) |
constexpr counted_iterator& operator--()
requires std::bidirectional_iterator<I>;
| (4) | (с C++20) |
constexpr counted_iterator operator--( int )
requires std::bidirectional_iterator<I>;
| (5) | (с C++20) |
constexpr counted_iterator operator+( std::iter_difference_t<I> n ) const
requires std::random_access_iterator<I>;
| (6) | (с C++20) |
constexpr counted_iterator& operator+=( std::iter_difference_t<I> n )
requires std::random_access_iterator<I>;
| (7) | (с C++20) |
constexpr counted_iterator operator-( std::iter_difference_t<I> n ) const
requires std::random_access_iterator<I>;
| (8) | (с C++20) |
constexpr counted_iterator& operator-=( std::iter_difference_t<I> n )
requires std::random_access_iterator<I>;
| (9) | (с C++20) |
Увеличивает или уменьшает базовый итератор current и расстояние до конца length .
1) Префиксный инкремент на единицу. Эквивалентно
++current; --length; return *this;. | Если | (до C++26) |
| Если
| (с C++26) |
2) Постфиксный инкремент на единицу. Эквивалентно
--length; try { return current++; } catch(...) { ++length; throw; }. | Если | (до C++26) |
| Если
| (с C++26) |
3) Постфиксный инкремент на единицу. Эквивалентно
counted_iterator temp{*this}; ++*this; return temp;.
4) Префиксный декремент на единицу. Эквивалентно
--current; ++length; return *this;.
5) Постфиксный декремент на единицу. Эквивалентно
counted_iterator temp{*this}; --*this; return temp;.
6) Возвращает адаптер итератора, сдвинутый на
n. Эквивалентно return counted_iterator(current + n, length - n);.
7) Сдвигает адаптер итератора на
n. Эквивалентно current += n; length -= n; return *this;. | Если | (до C++26) |
| Если
| (с C++26) |
8) Возвращает адаптер итератора, сдвинутый на
-n. Эквивалентно return counted_iterator(current - n, length + n);.
9) Сдвигает адаптер итератора на
-n. Эквивалентно current -= n; length += n; return *this;. | Если | (до C++26) |
| Если
| (с C++26) |
Параметры
| n | - | количество позиций, на которое нужно увеличить или уменьшить адаптер итератора |
Возвращаемое значение
1)
*this
2,3) Копия
*this, созданная до изменения.
4)
*this
5) Копия
*this, созданная до изменения.
6) Адаптер итератора, сдвинутый на
n.
7)
*this
8) Адаптер итератора, сдвинутый на
-n.
9)
*this
Пример
#include <cassert>
#include <initializer_list>
#include <iterator>
int main()
{
const auto v = {1, 2, 3, 4, 5, 6};
std::counted_iterator<std::initializer_list<int>::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)
}
См. также
|
(C++20) | сдвигает итератор (шаблон функции) |
|
(C++20) | вычисляет расстояние между двумя адаптерами итератора (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/counted_iterator/operator_arith