common_iterator& operator++(); // (1)
decltype(auto) operator++(int); // (2)
概要
イテレータをインクリメントする。
事前条件
holds_alternative<I>(v_) == true
効果
I, S
の値のどちらかをvariant<I, S>
型のメンバ変数v_
に保持しているとして
-
(1) : 以下と等価
++get<I>(v_); return *this;
-
(2) : 次のどちらかと等価
-
I
がforward_iterator
のモデルである場合
common_iterator tmp = *this; ++*this; return tmp;
-
それ以外の場合 :
return get<I>(v_)++;
-
例
#include <iostream>
#include <iterator>
#include <ranges>
int main() {
auto seq = std::views::iota(1) | std::views::take(5);
// common_iteratorを通すことでイテレータ型と番兵型を合わせる
using CI = std::common_iterator<std::ranges::iterator_t<decltype(seq)>, std::ranges::sentinel_t<decltype(seq)>>;
CI ci{std::ranges::begin(seq)};
std::cout << *ci << std::endl;
++ci;
std::cout << *ci << std::endl;
ci++;
std::cout << *ci << std::endl;
}
出力
1
2
3
バージョン
言語
- C++20
処理系
- Clang: ??
- GCC: 10.1 ✅
- Visual C++: 2019 Update 9 ✅