std::ranges::adjacent_view<V,N>::iterator<Const>::operator++,--,+=,-=
ja.cppreference.net より
constexpr /*iterator*/& operator++();
|
(1) | (C++23 以降) |
constexpr /*iterator*/ operator++( int );
|
(2) | (C++23 以降) |
constexpr /*iterator*/& operator--()
requires ranges::bidirectional_range<Base>;
|
(3) | (C++23 以降) |
constexpr /*iterator*/ operator--( int )
requires ranges::bidirectional_range<Base>;
|
(4) | (C++23 以降) |
constexpr /*iterator*/& operator+=( difference_type n )
requires ranges::random_access_range<Base>;
|
(5) | (C++23 以降) |
constexpr /*iterator*/& operator-=( difference_type n )
requires ranges::random_access_range<Base>;
|
(6) | (C++23 以降) |
イテレータをインクリメントまたはデクリメントする。
current_ をイテレータの内部配列とする。
1) 以下と等価:
呼び出し前に
for (auto& i : current_)
i = std::ranges::next(i);
return *this;
current_.back() がインクリメント可能でない場合、動作は未定義である。2) 以下と等価:
auto tmp = *this;
++*this;
return tmp;
3) 以下と等価:
呼び出し前に
for (auto& i : current_)
i = std::ranges::prev(i);
return *this;
current_.front() がデクリメント可能でない場合、動作は未定義である。4) 以下と等価:
auto tmp = *this;
--*this;
return tmp;
5) 以下と等価:
呼び出し前に
for (auto& i : current_)
i = i + n;
return *this;
current_.back() + n の動作が明確に定義されていない場合、動作は未定義である。6) 以下と等価:
呼び出し前に
for (auto& i : current_)
i = i - n;
return *this;
current_.front() - n の動作が明確に定義されていない場合、動作は未定義である。パラメータ
| n | - | 現在位置からの相対位置 |
戻り値
1,3,5,6)
*
this
2,4)
変更前に行われた
*
this
のコピー。
例
このコードを実行
#include <cassert> #include <list> #include <ranges> #include <utility> #include <vector> int main() { { auto v = std::vector{0, 1, 2, 3, 4, 5}; auto i = (v | std::views::pairwise).begin(); assert((*i == std::pair{0, 1})); ++i; // オーバーロード (1) assert((*i == std::pair{1, 2})); --i; // オーバーロード (3) assert((*i == std::pair{0, 1})); i += 2; // オーバーロード (5) assert((*i == std::pair{2, 3})); i -= 2; // オーバーロード (6) assert((*i == std::pair{0, 1})); } { auto v = std::list{0, 1, 2, 3, 4, 5}; auto i = (v | std::views::pairwise).begin(); assert((*i == std::pair{0, 1})); ++i; // オーバーロード (1) assert((*i == std::pair{1, 2})); --i; // オーバーロード (3) assert((*i == std::pair{0, 1})); // i += 2; // エラー: v は random_access_range ではない; オーバーロード (5) // i -= 2; // エラー: v は random_access_range ではない; オーバーロード (6) } }
関連項目
|
(C++23)
|
イテレータ演算を実行する
(公開メンバ関数) |