sized-random-access-range
来自cppreference.com
| (C++26 起) (仅用于阐述*) |
||
仅用于阐述的概念 sized-random-access-range 指定能在常数时间内知晓其大小并允许随机访问其元素的 range 类型。
注解
sized-random-access-range 被并行范围算法用于拒绝无边界的范围实参。这是因为:
- 高效的并行实现需要知道迭代空间的边界。否则会难以用分治法在多个执行线程中创建任务。
- 序列范围算法允许传递像
std::ranges::views::iota(0)这样的“无限”范围,这可能会导致无限循环。在并行执行的情况下很难找到此类有用的场景。要求数据序列有界可以潜在地避免运行时错误。 - 显式使用有边界的输出范围遵循既有的安全编码实践,它们一般建议甚至要求在任何情况下都要指定输出大小以避免越界数据修改。
- 如果多个输出范围或序列有界,算法就可以在抵达最短的那个序列的末尾时立刻停止。标准库中已经存在这种先例,这些算法接收两个输入大小可能不同的序列,并选择更小的那个大小作为要迭代的次数,例如 std::ranges::transform 和 std::ranges::mismatch。
- 在输出数据序列有界的情况下,就不再需要假设对所有输入都有足够空间。这样就存在算法不去处理输入序列中某些元素的可能性,并且在停止处理时也可以合理地返回到停止位置的迭代器。