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 ✅