Namespaces
Variants

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

ja.cppreference.net より
 
 
Ranges ライブラリ
Range アダプタ
 
 
ヘッダ <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)
namespace views {
    inline constexpr /* unspecified */ join_with = /* unspecified */;
}
(C++23 以上) (2)
(C++23 以上)
template< ranges::viewable_range R, class Pattern >
    requires /* see below */
constexpr ranges::view auto join_with( R&& r, Pattern&& pattern );
呼び出しシグネチャ
template< class Pattern >
constexpr /* range adaptor closure */ join_with( Pattern&& pattern );
(C++23 以上)
を表す range アダプタ。区切り文字の各要素が view の要素の間に挿入される。区切り文字は単一の要素でも要素の 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を構築する
(public member function)
基盤となる(アダプトされた)ビューのコピーを返す
(public member function)
先頭を指すイテレータを返す
(public member function)
終端を指すイテレータまたはセンチネルを返す
(public member function)
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++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 4074 C++23 join_with_view の制約が不十分だった 制約を更新

関連項目

view の平坦化によって得られるシーケンスからなる view
(クラステンプレート) (range adaptor object)
適応された view の連結からなる view
(クラステンプレート) (customization point object)