constexpr counted_iterator() requires default_initializable<I> = default; // (1)
constexpr counted_iterator(I x, iter_difference_t<I> n); // (2)
template<class I2>
requires convertible_to<const I2&, I>
constexpr counted_iterator(const counted_iterator<I2>& x); // (3)
概要
counted_iterator
オブジェクトを構築する。
事前条件
- (2) :
n >= 0
効果
I
の値をcurrent
メンバ変数、カウントの値をlength
メンバ変数に保持するとする。
- (1) :
current, n
をデフォルト構築する。 - (2) :
current
をx
からムーブ構築し、length
をn
で初期化する。 - (3) :
current
をx.current
から、length
をx.length
からコピーして初期化する。
例
#include <iostream>
#include <iterator>
#include <ranges>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// (1) デフォルトコンストラクタ
std::counted_iterator<std::vector<int>::iterator> ci1{};
// (2) イテレータとカウントから構築
std::counted_iterator ci2{std::ranges::begin(vec), 5};
// (3) コピーコンストラクタ
std::counted_iterator ci3{ci2};
}
出力
バージョン
言語
- C++20
処理系
- Clang: ??
- GCC: 10.1 ✅
- Visual C++: 2019 Update 8 ✅