namespace std::ranges {
template<input_or_output_iterator I, sentinel_for<I> S = I, subrange_kind K = sized_sentinel_for<S, I> ? subrange_kind::sized : subrange_kind::unsized>
requires (K == subrange_kind::sized || !sized_sentinel_for<S, I>)
class subrange : public view_interface<subrange<I, S, K>> { …… };
}
概要
subrange
は、イテレータi
と番兵s
が表すイテレータ範囲[i, s)
をRangeとして扱うクラステンプレート。
subrange
はborrowed_range
、view
のモデルであり、また、大きさ2のtuple-likeな型である。第0要素はイテレータ、第1要素は番兵。
subrange
はsized_range
である場合(K == subrange_kind::sized
)とそうでない場合(K == subrange_kind::unsized
)の両方をサポートする。
また、元のRangeがsized_range
でなくても、長さを別に指定することでsized_range
になれる。
テンプレートパラメータ制約
subrange_kind K
がsized
である。または、イテレータI
と番兵S
がsized_sentinel_for
を満たさない。
メンバ関数
名前 | 説明 | 対応バージョン |
---|---|---|
(constructor) |
コンストラクタ | C++20 |
operator PairLike |
pair-like な型に変換する |
C++20 |
begin |
先頭を指すイテレータを取得する | C++20 |
end |
番兵を取得する | C++20 |
empty |
Rangeが空かどうかを判定する | C++20 |
size |
要素数を取得する | C++20 |
next |
先頭を前進させた部分Rangeを得る | C++20 |
prev |
先頭を後退させた部分Rangeを得る | C++20 |
advance |
部分Rangeの先頭を動かす | C++20 |
継承しているメンバ関数
名前 | 説明 | 対応バージョン |
---|---|---|
operator bool |
Rangeが空でないかどうかを判定する | C++20 |
data |
配列の先頭へのポインタを取得する | C++20 |
front |
先頭要素への参照を取得する | C++20 |
back |
末尾要素への参照を取得する | C++20 |
operator[] |
要素へアクセスする | C++20 |
cbegin |
定数イテレータを取得する | C++23 |
cend |
定数イテレータ(番兵)を取得する | C++23 |
推論補助
名前 | 説明 | 対応バージョン |
---|---|---|
(deduction_guide) |
クラステンプレートの推論補助 | C++20 |
カスタマイゼーション
名前 | 説明 | 対応バージョン |
---|---|---|
enable_borrowed_range |
enable_borrowed_range の特殊化 (variable template) |
C++20 |
タプルインターフェース
名前 | 説明 | 対応バージョン |
---|---|---|
tuple_size |
静的な要素数取得(class template) | C++20 |
tuple_element |
静的な要素の型取得(class template) | C++20 |
get |
要素を取得する(function template) | C++20 |
バージョン
言語
- C++20
処理系
- Clang: 13.0.0 ✅
- GCC: 10.1.0 ✅
- ICC: ?
- Visual C++: 2019 Update 10 ✅