最終更新日時: 2025年07月09日 00時33分39秒 (JST)
Akira Takahashi が更新

履歴 編集

class
<iterator>

# std::default_sentinel_t(C++20)

    namespace std {
      struct default_sentinel_t {};

      inline constexpr default_sentinel_t default_sentinel{};
    }

## 概要

`default_sentinel_t`は、任意の範囲の終端を示すことのできる番兵型である。

配列のようにイテレータ自身が範囲の終端を示すのではなく、別の方法で範囲の終端を計算可能である場合にイテレータ型の定義を簡易化するために使用できる。

イテレータ型でこの型との間の等値比較演算子（`==`、`!=`は導出される）を適切に定義し、その範囲を示すクラス（コンテナや`View`）の`end()`がこの型の値を返すようにすることで利用する。

## 例

    #include <iostream>
    #include <iterator>
    #include <ranges>
    #include <vector>

    int main() {
      std::vector<int> vec = {1, 2, 3, 4, 5};

      std::counted_iterator ci{std::ranges::begin(vec), 3};

      for (; ci != std::default_sentinel; ++ci) {
        std::cout << *ci << " ";
      }
    }

### 出力

    1 2 3

## バージョン

### 言語

- C++20

### 処理系

- Clang: ??
- GCC: 10.1 ✅
- Visual C++: 2019 Update 7 ✅

## 参照

- P0896R4 The One Ranges Proposal (was Merging the Ranges TS)