std::ranges::views::join_with, std::ranges::join_with_view
ja.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) |
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 以上) | |
(C++23 以上)1) range の view を平坦化して得られるシーケンスから構成される view
を表す range アダプタ。区切り文字の各要素が view の要素の間に挿入される。区切り文字は単一の要素でも要素の view でもよい。
/*concatable*/ の定義については、std::ranges::concat_view を参照のこと。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
の制約が不十分だった
|
制約を更新 |
関連項目
|
(C++20)
|
view
の平坦化によって得られるシーケンスからなる
view
(クラステンプレート) (range adaptor object) |
適応された
view
の連結からなる
view
(クラステンプレート) (customization point object) |