std::ranges::views::repeat,std::ranges::repeat_view
定义在头文件 <ranges> 中 |
||
template< std::move_constructible W, std::semiregular Bound = std::unreachable_sentinel_t > |
(1) | (自 C++23 起) |
namespace views { inline constexpr /* unspecified */ repeat = /* unspecified */; |
(2) | (自 C++23 起) |
调用签名 |
||
template< class W > requires /* see below */ |
(自 C++23 起) | |
template< class W, class Bound > requires /* see below */ |
(自 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
类类型的常量 函数对象。为了说明目的,其类型的 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 的大小(如果其大小已确定)(公共成员函数) | |
从 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) | (自 C++23 起) |
constexpr explicit repeat_view( const W& value, Bound bound = Bound() ); |
(2) | (自 C++23 起) |
constexpr explicit repeat_view( W&& value, Bound bound = Bound() ); |
(3) | (自 C++23 起) |
template < class... WArgs, class... BoundArgs > requires std::constructible_from<W, WArgs...> |
(4) | (自 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; |
(自 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) | (自 C++23 起) |
constexpr std::unreachable_sentinel_t end() const; |
(2) | (自 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>); |
(自 C++23 起) | |
返回 to-unsigned-like
(bound_
).
[编辑] 推导指南
template< class W, class Bound = std::unreachable_sentinel_t > repeat_view( W, Bound = Bound() ) -> repeat_view<W, Bound>; |
(自 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 | 使用 repeat_view 调用 views::repeat 没有创建嵌套的 repeat_view |
创建嵌套的repeat_view
|
[编辑] 另请参阅
(C++20) |
一个 view ,由重复递增初始值生成的序列组成(类模板) (定制点对象) |