Namespaces
Variants

sized-random-access-range(有大小随机访问范围)

来自 zh.cppreference.net
 
 
范围库
范围适配器
 


template< class T >
concept /*sized-random-access-range*/ =
    ranges::random_access_range<T> &&
    ranges::sized_range<T>;
(自 C++26 起)
(仅用于阐释*)

仅用于阐释的概念sized-random-access-range 指定了一种范围类型的要求,该类型能在常数时间内获知其大小,并允许对其元素进行随机访问。

注解

sized-random-access-range 被并行范围算法用来拒绝无界范围实参。原因如下:

  • 为了高效的并行实现,需要知道迭代空间的界限。否则,很难应用“分而治之”的策略来为多个执行线程创建工作。
  • 虽然串行范围算法允许传递像 std::ranges::views::iota(0) 这样的“无限”范围,但这可能导致无限循环。在并行执行的情况下,很难想象其有用性。要求数据序列有界可能有助于防止运行时的错误。
  • 使用显式有界的输出范围遵循了安全编码的既定实践,这些实践建议甚至要求始终指定输出的大小,以防止超出范围的数据修改。
  • 如果多个输入范围或序列是有界的,算法通常应在达到最短序列的末尾时立即停止。标准中已有先例,算法接受两个可能具有不同输入大小的序列,并选择较小的尺寸作为将要执行的迭代次数,例如 std::ranges::transform 和 std::ranges::mismatch。
  • 由于输出数据序列是有界的,因此不再假设它们有足够的空间容纳所有输入。因此,输入序列的某些元素可能不会被算法处理,算法返回指向这些序列中处理停止位置的迭代器是有意义的。