命名空间
变体
操作

std::ranges::views::join_with, std::ranges::join_with_view

来自 cppreference.cn
< cpp‎ | ranges
 
 
范围库
范围适配器
 
 
定义于头文件 <ranges>
template< ranges::input_range V, ranges::forward_range Pattern >

  requires ranges::view<V> &&
           ranges::input_range<ranges::range_reference_t<V>> &&
           ranges::view<Pattern> &&
           /*concatable*/<ranges::range_reference_t<V>, Pattern>
class join_with_view :

    ranges::view_interface<join_with_view<V, Pattern>>
(1) (自 C++23 起)
namespace views {

    inline constexpr /* unspecified */ join_with = /* unspecified */;

}
(2) (自 C++23 起)
调用签名
template< ranges::viewable_range R, class Pattern >

    requires /* see below */

constexpr ranges::view auto join_with( R&& r, Pattern&& pattern );
(自 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),对于任何合适的子表达式 ef

join_with_view 模型 input_range

当满足以下条件时,join_with_view 模型 forward_range

当满足以下条件时,join_with_view 模型 bidirectional_range

当满足以下条件时,join_with_view 模型 common_range

内容

[edit] 嵌套类型

类型 定义
InnerRng ranges::range_reference_t<V>
(仅为说明目的成员类型*,实现不需要以此方式定义实体。此实体的名称未指定。)

[edit] 数据成员

成员 定义
V base_ 底层(适配的)视图
(仅为说明目的成员对象*,实现不需要以此方式定义实体。此实体的名称未指定。)
Pattern pattern_ 模式对象
(仅为说明目的成员对象*,实现不需要以此方式定义实体。此实体的名称未指定。)
non-propagating-cache <ranges::iterator_t<V>> outer_it_
(仅当 V 不模型 forward_range 时存在)
外部迭代器的缓存
(仅为说明目的成员对象*,实现不需要以此方式定义实体。此实体的名称未指定。)
non-propagating-cache <std::remove_cv_t<InnerRng >> inner_
(仅当 std::is_reference_v<InnerRng >false 时存在)
内部范围的缓存
(仅为说明目的成员对象*,实现不需要以此方式定义实体。此实体的名称未指定。)

[edit] 成员函数

构造一个 join_with_view
(公有成员函数) [编辑]
返回底层(适配的)视图的副本
(公有成员函数) [编辑]
返回指向起始的迭代器
(公有成员函数) [编辑]
返回指向结尾的迭代器或哨位
(公有成员函数) [编辑]
继承自 std::ranges::view_interface
返回派生视图是否为空,仅当其满足 sized_rangeforward_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_rangecommon_range 时提供
(std::ranges::view_interface<D> 的公有成员函数) [编辑]

[edit] 推导指引

[edit] 嵌套类

迭代器类型
(仅为说明目的成员类模板*,实现不需要以此方式定义实体。此实体的名称未指定。)
哨位类型
(仅为说明目的成员类模板*,实现不需要以此方式定义实体。此实体的名称未指定。)

[edit] 注解

特性测试 Std 特性
__cpp_lib_ranges_join_with 202202L (C++23) std::ranges::join_with_view

[edit] 示例

#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.

[edit] 缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。

DR 应用于 已发布行为 正确行为
LWG 4074 C++23 join_with_view 约束不足 更新了约束

[edit] 参见

一个 view,由扁平化 viewrange 获得的序列组成
(类模板) (范围适配器对象)[编辑]
一个 view,由适配的视图的串联组成
(类模板) (自定义点对象)[编辑]