最終更新日時(UTC): 2026年02月26日 04時20分38秒
Akira Takahashi が更新

履歴 編集

function
<iterator>

# std::counted_iterator::コンストラクタ(C++20)

    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 ８ ✅

## 参照

- P0896R4 The One Ranges Proposal (was Merging the Ranges TS)
- P2325R3 Views should not be required to be default constructible
- P3697R1 Minor additions to C++26 standard library hardening
- P3878R1 Standard library hardening should not use the 'observe' semantic