std::ranges::views::repeat, std::ranges::repeat_view
定义于头文件 <ranges> |
||
template< std::move_constructible W, std::semiregular Bound = std::unreachable_sentinel_t > |
(1) | (since C++23) |
namespace views { inline constexpr /* unspecified */ repeat = /* unspecified */; |
(2) | (since C++23) |
调用签名 |
||
template< class W > requires /* see below */ |
(since C++23) | |
template< class W, class Bound > requires /* see below */ |
(since C++23) | |
辅助概念 |
||
concept /*integer-like-with-usable-difference-type*/ = /*is-signed-integer-like*/<T> || |
(3) | (仅为阐述目的*) |
repeat_view
建模 random_access_range
。如果 Bound
不是 std::unreachable_sentinel_t,则 repeat_view
也建模 sized_range
和 common_range
。
内容 |
自定义点对象
名称 views::repeat 表示一个自定义点对象,它是一个字面 semiregular 类类型的 const 函数对象。为了阐述目的,其类型的 cv-非限定版本表示为 __repeat_fn。
__repeat_fn 的所有实例都相等。在相同参数上调用 __repeat_fn 类型的不同实例的效果是等效的,无论表示实例的表达式是左值还是右值,以及是否是 const 限定的(但是,不要求 volatile 限定的实例可调用)。因此,views::repeat 可以自由复制,并且其副本可以互换使用。
给定一组类型 Args...
,如果 std::declval<Args>()... 满足上述 views::repeat 参数的要求,则 __repeat_fn
建模
- std::invocable<__repeat_fn, Args...>,
- std::invocable<const __repeat_fn, Args...>,
- std::invocable<__repeat_fn&, Args...>, 和
- std::invocable<const __repeat_fn&, Args...>.
否则,__repeat_fn
的任何函数调用运算符都不参与重载解析。
[编辑] 数据成员
成员 | 定义 |
movable-box <W> value_ |
视图的重复元素 (仅为阐述目的的成员对象*) |
Bound bound_ |
哨兵值 (仅为阐述目的的成员对象*) |
[编辑] 成员函数
创建一个 repeat_view (公共成员函数) | |
获取 repeat_view 的起始迭代器(公共成员函数) | |
获取表示 repeat_view 结尾的哨兵(公共成员函数) | |
如果 repeat_view 是 sized,则获取其大小(公共成员函数) | |
继承自 std::ranges::view_interface | |
返回派生视图是否为空,仅当其满足 sized_range 或 forward_range 时提供(std::ranges::view_interface<D> 的公共成员函数) | |
(C++23) |
返回范围起始位置的常量迭代器 (std::ranges::view_interface<D> 的公共成员函数) |
(C++23) |
返回范围常量迭代器的哨兵 (std::ranges::view_interface<D> 的公共成员函数) |
返回派生视图是否非空,仅当 ranges::empty 适用于它时提供 (std::ranges::view_interface<D> 的公共成员函数) | |
返回派生视图中的第一个元素,如果其满足 forward_range 则提供(std::ranges::view_interface<D> 的公共成员函数) | |
返回派生视图中的最后一个元素,仅当其满足 bidirectional_range 和 common_range 时提供(std::ranges::view_interface<D> 的公共成员函数) | |
返回派生视图中的第 n 个元素,仅当其满足 random_access_range 时提供(std::ranges::view_interface<D> 的公共成员函数) |
std::ranges::repeat_view::repeat_view
repeat_view() requires std::default_initializable<W> = default; |
(1) | (since C++23) |
constexpr explicit repeat_view( const W& value, Bound bound = Bound() ); |
(2) | (since C++23) |
constexpr explicit repeat_view( W&& value, Bound bound = Bound() ); |
(3) | (since C++23) |
template < class... WArgs, class... BoundArgs > requires std::constructible_from<W, WArgs...> |
(4) | (since C++23) |
value_
,并使用 std::make_from_tuple<Bound>(std::move(bound_args)) 初始化 bound_
。参数
value | - | 要重复生成的值 |
bound | - | 边界 |
value_args | - | 包含 value_ 初始化器的元组 |
bound_args | - | 包含 bound_ 初始化器的元组 |
std::ranges::repeat_view::begin
constexpr /*iterator*/ begin() const; |
(since C++23) | |
返回 iterator
(std::addressof(*value_
))。
std::ranges::repeat_view::end
constexpr /*iterator*/ end() const requires (!std::same_as<Bound, std::unreachable_sentinel_t>); |
(1) | (since C++23) |
constexpr std::unreachable_sentinel_t end() const; |
(2) | (since C++23) |
iterator
(std::addressof(*value_
),
bound_
)。
std::ranges::repeat_view::size
constexpr auto size() const requires (!std::same_as<Bound, std::unreachable_sentinel_t>); |
(since C++23) | |
返回 to-unsigned-like
(bound_
)。
[编辑] 推导指引
template< class W, class Bound = std::unreachable_sentinel_t > repeat_view( W, Bound = Bound() ) -> repeat_view<W, Bound>; |
(since C++23) | |
[编辑] 嵌套类
迭代器类型 (仅为阐述目的的成员类*) |
[编辑] 注释
特性测试 宏 | 值 | Std | 特性 |
---|---|---|---|
__cpp_lib_ranges_repeat |
202207L |
(C++23) | std::ranges::repeat_view
|
[编辑] 示例
#include <iostream> #include <ranges> #include <string_view> using namespace std::literals; int main() { // bounded overload for (auto s : std::views::repeat("C++"sv, 3)) std::cout << s << ' '; std::cout << '\n'; // unbounded overload for (auto s : std::views::repeat("I know that you know that"sv) | std::views::take(3)) std::cout << s << ' '; std::cout << "...\n"; }
输出
C++ C++ C++ I know that you know that I know that you know that I know that you know that ...
[编辑] 缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
LWG 4053 | C++20 | 对 views::repeat 的一元调用未衰减参数 |
衰减参数 |
LWG 4054 | C++20 | 使用 views::repeat 调用 repeat_view 未创建嵌套的 repeat_view |
创建嵌套的repeat_view
|
[编辑] 参见
(C++20) |
一个视图,由通过重复递增初始值生成的序列组成 (类模板) (自定义点对象) |