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

来自cppreference.com
< cpp‎ | ranges
 
 
范围库
范围访问
范围转换器
(C++23)
范围原语



悬垂迭代器处理
范围概念
视图

范围工厂
适配器
范围生成器
范围适配器对象
范围适配器闭包对象
辅助项
 
 
在标头 <ranges> 定义
template< ranges::input_range V, ranges::forward_range Pattern >

  requires ranges::view<V> and
           ranges::input_range<ranges::range_reference_t<V>> and
           ranges::view<Pattern> and
           /* 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 = /* 未指定 */;

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

    requires /* 见下文 */

constexpr ranges::view auto join_with( R&& r, Pattern&& pattern );
(C++23 起)
template< class Pattern >
constexpr /* 范围适配器闭包 */ join_with( Pattern&& pattern );
(C++23 起)
1) 表示 view 的范围适配器,由拉平范围的视图得到的序列组成,每个元素视图元素之间插入了分隔符。分隔符可以是单个元素,也可以是元素视图。
2) 范围适配器对象 (RangeAdaptorObject) 。 对于任何合适的子表达式 ef 来说,views::join_with(e, f) 表达式等价join_with_view(e, f)

如果以下概念全部被实现,ranges::range_reference_t<V>Pattern 有兼容的元素:

join_with_view 实现 input_range

join_with_view 实现 forward_range,仅当:

join_with_view 实现 bidirectional_range,仅当:

join_with_view 实现 common_range,仅当:

成员函数

构造 join_with_view
(公开成员函数)
(C++23)
返回底层(适配的)视图的副本
(公开成员函数)
(C++23)
返回指向起始的迭代器
(公开成员函数)
(C++23)
返回指向末尾的迭代器或哨位
(公开成员函数)
继承自 std::ranges::view_interface
(C++20)
返回视图是否为空。若视图满足 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> 的公开成员函数)
(C++20)
返回派生视图中的首元素。若视图满足 forward_range 则提供。
(std::ranges::view_interface<D> 的公开成员函数)
(C++20)
返回派生视图中的末元素。若视图满足 bidirectional_rangecommon_range 则提供。
(std::ranges::view_interface<D> 的公开成员函数)

推导指引

在标头 <ranges> 定义
template< class R, class P >
join_with_view( R&&, P&& ) -> join_with_view<views::all_t<R>, views::all_t<P>>;
(1) (C++23 起)
template< class R >

join_with_view( R&&, ranges::range_value_t<ranges::range_reference_t<R>> )
  -> join_with_view<views::all_t<R>,
                    ranges::single_view<

                        ranges::range_value_t<ranges::range_reference_t<R>>>;
(2) (C++23 起)

这些推导指引是为 join_with_view 提供的,允许从范围和分隔符进行推导。

1) 分隔符是元素范围。
2) 分隔符是单个元素。

嵌套类

(C++23)
迭代器类型
(仅用于阐述的成员类模板*)
(C++23)
哨位类型
(仅用于阐述的成员类模板*)

示例

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

参阅

由拉平 range 组成的 view 所获得的序列构成的 view
(类模板) (范围适配器对象)