std::ranges::views::join_with, std::ranges::join_with_view
来自 cppreference.com
定义在头文件 <ranges> 中 |
||
template< ranges::input_range V, ranges::forward_range Pattern > requires ranges::view<V> && |
(1) | (自 C++23) |
namespace views { inline constexpr /* unspecified */ join_with = /* unspecified */; |
(2) | (自 C++23) |
调用签名 |
||
template< ranges::viewable_range R, class Pattern > requires /* see below */ |
(自 C++23) | |
template< class Pattern > constexpr /* range adaptor closure */ join_with( Pattern&& pattern ); |
(自 C++23) | |
1) 一个范围适配器,它代表一个
view
,该视图由将范围视图展平而获得的序列组成,每个元素之间插入分隔符的元素。分隔符可以是单个元素或元素视图。 有关 /*concatable*/ 的定义,请参阅 std::ranges::concat_view。
2) RangeAdaptorObject。表达式 views::join_with(e, f) 与 join_with_view(e, f) 相当于 表达式等价,对于任何合适的子表达式 e 和 f。
join_with_view
模仿 input_range
。
join_with_view
模仿 forward_range
当
- ranges::range_reference_t<V> 是一个引用,并且
-
V
和 ranges::range_reference_t<V> 每个都模仿forward_range
。
join_with_view
模仿 bidirectional_range
当
- ranges::range_reference_t<V> 是一个引用,
-
V
,ranges::range_reference_t<V> 和Pattern
每个都模仿bidirectional_range
,并且 - ranges::range_reference_t<V> 和
Pattern
每个都模仿common_range
。
join_with_view
模仿 common_range
当
- ranges::range_reference_t<V> 是一个引用,并且
-
V
和 ranges::range_reference_t<V> 每个都模仿forward_range
和common_range
。
内容 |
[编辑] 嵌套类型
类型 | 定义 |
InnerRng |
ranges::range_reference_t<V> (仅供说明目的的成员类型*) |
[编辑] 数据成员
成员 | 定义 |
V base_ |
底层(自适应)视图 (仅供说明目的的成员对象*) |
Pattern pattern_ |
模式对象 (仅供说明目的的成员对象*) |
非传播缓存 <ranges::iterator_t<V>> outer_it_ (仅在 V 不建模 前向范围 时存在)
|
外部迭代器的缓存 (仅供说明目的的成员对象*) |
非传播缓存 <std::remove_cv_t<InnerRng >> inner_ (仅在 std::is_reference_v< InnerRng > 为 false 时存在)
|
内部范围的缓存 (仅供说明目的的成员对象*) |
[编辑] 成员函数
构造一个 join_with_view (公有成员函数) | |
返回底层(自适应)视图的副本 (公有成员函数) | |
返回指向范围开头的迭代器 (公有成员函数) | |
返回指向范围结尾的迭代器或哨兵 (公有成员函数) | |
从 std::ranges::view_interface 继承 | |
返回派生视图是否为空。如果它满足 定长范围 或 前向范围 ,则提供。( 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> 的公有成员函数) | |
返回派生视图中的第一个元素。如果它满足 前向范围 ,则提供。( std::ranges::view_interface<D> 的公有成员函数) | |
返回派生视图中的最后一个元素。如果它满足 双向范围 和 通用范围 ,则提供。( std::ranges::view_interface<D> 的公有成员函数) |
[编辑] 推断指南
[编辑] 嵌套类
迭代器类型 (仅供说明目的的成员类模板*) | |
哨兵类型 (仅供说明目的的成员类模板*) |
[编辑] 注释
功能测试 宏 | 值 | Std | 功能 |
---|---|---|---|
__cpp_lib_ranges_join_with |
202202L | (C++23) | std::ranges::join_with_view
|
[编辑] 示例
运行此代码
#include <iostream> #include <ranges> #include <string_view> #include <vector> int main() { using namespace std::literals; std::vector v{"This"sv, "is"sv, "a"sv, "test."sv}; auto joined = v | std::views::join_with(' '); for (auto c : joined) std::cout << c; std::cout << '\n'; }
输出
This is a test.
[编辑] 缺陷报告
以下更改行为的缺陷报告被追溯应用于以前发布的 C++ 标准。
DR | 应用于 | 发布的行为 | 正确的行为 |
---|---|---|---|
LWG 4074 | C++23 | join_with_view 的约束不足 |
更新了约束 |
[编辑] 另请参阅
(C++20) |
一个 视图 ,由扁平化一个由 范围 组成的 视图 所获得的序列构成(类模板) (范围适配器对象) |
一个 视图 ,由自适应视图的串联构成(类模板) (定制点对象) |