std::ranges::views::repeat, std::ranges::repeat_view
| 定义于头文件 <ranges>
|
||
template< std::move_constructible W,
std::semiregular Bound = std::unreachable_sentinel_t >
requires (std::is_object_v<W> && std::same_as<W, std::remove_cv_t<W>> &&
(/*integer-like-with-usable-difference-type*/<Bound> ||
std::same_as<Bound, std::unreachable_sentinel_t>))
class repeat_view : public ranges::view_interface<repeat_view<W, Bound>>
|
(1) | (C++23 起) |
namespace views {
inline constexpr /* unspecified */ repeat = /* unspecified */;
}
|
(2) | (C++23 起) |
| 调用签名 |
||
template< class W >
requires /* see below */
constexpr /* see below */ repeat( W&& value );
|
(C++23 起) | |
template< class W, class Bound >
requires /* see below */
constexpr /* see below */ repeat( W&& value, Bound&& bound );
|
(C++23 起) | |
| 辅助概念 |
||
concept /*integer-like-with-usable-difference-type*/ =
/*is-signed-integer-like*/<T> ||
(/*is-integer-like*/ <T> && std::weakly_incrementable<T>)
|
(3) | (仅用于阐述*) |
views::repeat(e) 和 views::repeat(e, f) 对于任何合适的子表达式 表达式等价于 repeat_view<std::decay_t<decltype((E))>>(e) 和 repeat_view(e, f) 分别(对于任何合适的子表达式 e 和 f)。repeat_view 满足 random_access_range。如果 Bound 不是 std::unreachable_sentinel_t,则 repeat_view 也满足 sized_range 和 common_range。
定制点对象
名称
views::repeat
表示一个
定制点对象
,这是一个常量
函数对象
,具有
字面量
类型的
semiregular
类类别。有关详细信息,请参阅
定制点对象
。
数据成员
| 成员 | 定义 |
movable-box
<
W
>
value_
|
视图的重复元素
( 仅用于说明的成员对象* ) |
Bound
bound_
|
哨兵值
( 仅用于说明的成员对象* ) |
成员函数
创建
repeat_view
(公开成员函数) |
|
获取
repeat_view
的起始迭代器
(公开成员函数) |
|
获取表示
repeat_view
末尾的哨位
(公开成员函数) |
|
获取
repeat_view
的大小(若其具有大小)
(公开成员函数) |
|
继承自 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>的公开成员函数
| |
返回派生视图中第 nth 个元素,仅在它满足 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 > ; |
(C++23 起) | |
嵌套类
|
迭代器类型
( 仅用于说明的成员类* ) |
注释
| 功能测试 宏 | 值 | 标准 | 功能 |
|---|---|---|---|
__cpp_lib_ranges_repeat
|
202207L
|
(C++23) |
std::ranges::repeat_view
|
示例
#include <iostream> #include <ranges> #include <string_view> using namespace std::literals; int main() { // 有界重载 for (auto s : std::views::repeat("C++"sv, 3)) std::cout << s << ' '; std::cout << '\n'; // 无界重载 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++标准。
| 缺陷报告 | 适用标准 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 4053 | C++20 |
对
views::repeat
的单参数调用未对参数进行退化处理
|
对参数进行退化处理 |
| LWG 4054 | C++20 |
使用
repeat_view
调用
views::repeat
未创建嵌套的
repeat_view
|
创建嵌套的
repeat_view
|
参见
|
(C++20)
|
由重复递增初始值生成的序列组成的
view
(类模板) (定制点对象) |