std::counted_iterator<I>:operator++,+,+=,--,-,-=
Von cppreference.com
< cpp | iterator | counted iterator
| constexpr counted_iterator& operator++(); |
(1) | (seit C++20) |
| constexpr decltype(auto) operator++( int ); |
(2) | (seit C++20) |
| constexpr counted_iterator operator++( int ) requires std::forward_iterator<I>; |
(3) | (seit C++20) |
| constexpr counted_iterator& operator--() requires std::bidirectional_iterator<I>; |
(4) | (seit C++20) |
| constexpr counted_iterator operator--( int ) requires std::bidirectional_iterator<I>; |
(5) | (seit C++20) |
| constexpr counted_iterator operator+( std::iter_difference_t<I> n ) const requires std::random_access_iterator<I>; |
(6) | (seit C++20) |
| constexpr counted_iterator& operator+=( std::iter_difference_t<I> n ) requires std::random_access_iterator<I>; |
(7) | (seit C++20) |
| constexpr counted_iterator operator-( std::iter_difference_t<I> n ) const requires std::random_access_iterator<I>; |
(8) | (seit C++20) |
| constexpr counted_iterator& operator-=( std::iter_difference_t<I> n ) requires std::random_access_iterator<I>; |
(9) | (seit C++20) |
Inkrementiert oder dekrementiert den zugrundeliegenden Iterator current und die Distanz zum Ende length.
Das Verhalten dieser Funktionen ist undefiniert, wenn length auf einen negativen Wert gesetzt würde.
1) Prä-Inkrement um eins. Äquivalent zu ++current; --length; return *this;.
2) Post-Inkrement um eins. Äquivalent zu --length; try { return current++; } catch(...) { ++length; throw; }.
3) Post-Inkrement um eins. Äquivalent zu counted_iterator temp{*this}; ++*this; return temp;.
4) Prä-Dekrement um eins. Äquivalent zu --current; ++length; return *this;.
5) Post-Dekrement um eins. Äquivalent zu counted_iterator temp{*this}; --*this; return temp;.
6) Gibt einen Iterator-Adapter zurück, der um n weitergeschaltet wird. Äquivalent zu return counted_iterator(current + n, length - n);.
7) Schaltet den Iterator-Adapter um n weiter. Äquivalent zu current += n; length -= n; return *this;.
8) Gibt einen Iterator-Adapter zurück, der um -n weitergeschaltet wird. Äquivalent zu return counted_iterator(current - n, length + n);.
9) Schaltet den Iterator-Adapter um -n weiter. Äquivalent zu current -= n; length += n; return *this;.
Inhalt |
[bearbeiten] Parameter
| n | - | die Anzahl der Positionen, um die der Iterator-Adapter inkrementiert oder dekrementiert werden soll |
[bearbeiten] Rückgabewert
1) *this
2,3) Eine Kopie von *this, die vor der Änderung erstellt wurde.
4) *this
5) Eine Kopie von *this, die vor der Änderung erstellt wurde.
6) Ein Iterator-Adapter, der um n weitergeschaltet ist.
7) *this
8) Ein Iterator-Adapter, der um -n weitergeschaltet ist.
9) *this
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#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) }
[bearbeiten] Siehe auch
| (C++20) |
bewegt den Iterator vorwärts (Funktionstemplate) |
| (C++20) |
berechnet die Distanz zwischen zwei Iterator-Adaptoren (Funktionstemplate) |