Namespaces
Variants

std::ranges::subrange<I,S,K>::subrange

ja.cppreference.net より
 
 
Range ライブラリ
Range アダプタ
 
 
subrange() requires std::default_initializable<I> = default;
(1) (C++20 以降)
constexpr subrange( /*convertible-to-non-slicing*/<I> auto i, S s )
    requires (!/*StoreSize*/);
(2) (C++20 以降)
constexpr subrange( /*convertible-to-non-slicing*/<I> auto i, S s,
                    /*make-unsigned-like-t*/<std::iter_difference_t<I>> n )
    requires (K == ranges::subrange_kind::sized);
(3) (C++20 以降)
template< /*different-from*/<subrange> R >
    requires ranges::borrowed_range<R> &&
             /*convertible-to-non-slicing*/<ranges::iterator_t<R>, I> &&
             std::convertible_to<ranges::sentinel_t<R>, S>
constexpr subrange( R&& r )
    requires (!/*StoreSize*/ || ranges::sized_range<R>);
(4) (C++20 以降)
template< ranges::borrowed_range R>
    requires /*convertible-to-non-slicing*/<ranges::iterator_t<R>, I> &&
           std::convertible_to<ranges::sentinel_t<R>, S>
constexpr subrange( R&& r,
                    /*make-unsigned-like-t*/<std::iter_difference_t<I>> n )
    requires (K == ranges::subrange_kind::sized)
    : subrange{ranges::begin(r), ranges::end(r), n} {}
(5) (C++20 以降)

subrange を構築します。

/*make-unsigned-like-t*/ および /*different-from*/ の定義については、それぞれ make-unsigned-like-t と different-from を参照してください。

 オーバーロード  データメンバ
begin_ end_ size_
(StoreSize が true の場合のみ)
(1) 値初期化 値初期化 0
で初期化 (2)std::move(i) s で初期化
該当なし (3)n
で初期化std::move(ranges::begin(r)) (4)ranges::end(r) static_cast<decltype(size_ )>
    (ranges::size(r))
で初期化 (5)n
2) [i, s) が 有効な範囲でない場合、動作は未定義です。
3) 以下の条件のいずれかが満たされる場合、動作は未定義です:
  • [i, s) は有効な範囲ではありません。
  • n == to-unsigned-like (ranges::distance(i, s))false です。

パラメータ

i - 範囲の先頭を示すイテレータ
s - 範囲の終端を示すセンチネル
r - 範囲
n - サイズヒント(範囲のサイズと等しくなければならない)

例

不具合報告

以下の動作変更欠陥報告書は、以前に公開されたC++標準に対して遡及的に適用されました。

DR Applied to Behavior as published Correct behavior
P2393R1 C++20 オーバーロード ( 4 ) について、 size_ は ranges:: size ( r ) で初期化される可能性があるが、
対応する unsigned-integer-like 型に常に暗黙的に変換可能ではない
変換を明示的に
行うように変更