- iterator[meta header]
- std[meta namespace]
- class[meta id-type]
- cpp20[meta cpp]
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 << " ";
}
}
- default_sentinel[color ff0000]
- counted_iterator[link /reference/iterator/counted_iterator.md]
- ranges::begin[link /reference/ranges/begin.md]
1 2 3
- C++20
- Clang: ??
- GCC: 10.1 [mark verified]
- Visual C++: 2019 Update 7 [mark verified]