Namespaces
Variants

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

来自 zh.cppreference.net
 
 
范围库
范围适配器
 
 
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
以初始化[i, s)2) 如果不是有效范围
,则行为未定义。3) 如果满足以下任一条件,则行为未定义:
  • [i, s)不是有效范围。
  • n == to-unsigned-like (ranges::distance(i, s))是false。

参数

i - 表示范围起始位置的迭代器
s - 表示范围结束位置的哨兵
r - 范围
n - 大小提示,必须等于范围的大小

示例

缺陷报告

下列行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。

DR 适用范围 发布时的行为 正确行为
P2393R1 C++20 对于重载版本 ( 4 ) , size_ 可能使用 ranges:: size ( r ) 初始化,但该值
并不总能隐式转换为对应的 unsigned-integer-like 类型
将转换
改为显式进行