Namespaces
Variants

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

来自 zh.cppreference.net
 
 
范围库
范围适配器
 
 
定义于头文件 <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),对于任何合适的子表达式 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_ 模式对象
(仅用于阐释的成员对象*)
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 时存在)
内部范围的缓存
(仅用于阐释的成员对象*)

成员函数

构造一个 join_with_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> 的公开成员函数)

推导指引

嵌套类

迭代器类型
( 仅用于说明的成员类模板* )
哨兵类型
( 仅用于说明的成员类模板* )

备注

功能测试 宏 值 标准 功能
__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++ 标准。

缺陷报告 应用于 发布时的行为 正确行为
LWG 4074 C++23 join_with_view 的约束条件不足 更新了约束条件

参见

通过展平 view 的 range s 序列获得的 view
(类模板) (范围适配器对象)
由适配视图连接而成的 view
(类模板) (定制点对象)