std::ranges::views::join_with, std::ranges::join_with_view
From cppreference.com
| ヘッダ <ranges> で定義 |
||
| template< ranges::input_range V, ranges::forward_range Pattern > requires ranges::view<V> && |
(1) | (C++23から) |
| namespace views { inline constexpr /* unspecified */ join_with = /* unspecified */; |
(2) | (C++23から) |
| 呼び出しシグネチャ |
||
| template< ranges::viewable_range R, class Pattern > requires /* 以下を参照 */ |
(C++23から) | |
| template< class Pattern > constexpr /* range adaptor closure */ join_with( Pattern&& pattern ); |
(C++23から) | |
1) 区切りのすべての要素がビューの要素間に挿入された、範囲のビューを平坦化することによって得られるシーケンスからなる
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 メンバ関数) | |
| 基になる(適応された)ビューのコピーを返す (public member function) | |
| 先頭へのイテレータを返す (public メンバ関数) | |
| 終端へのイテレータまたはセンチネルを返す (public メンバ関数) | |
std::ranges::view_interface から継承 | |
派生ビューが空かどうかを返す。sized_range または forward_range を満たす場合にのみ提供される( std::ranges::view_interface<D> の public メンバ関数) | |
| (C++23) |
範囲の先頭への定数イテレータを返す ( std::ranges::view_interface<D> の public メンバ関数) |
| (C++23) |
範囲の定数イテレータの番兵を返す ( std::ranges::view_interface<D> の public メンバ関数) |
| 派生ビューが空でないかどうかを返す。ranges::empty が適用可能な場合にのみ提供される ( std::ranges::view_interface<D> の public メンバ関数) | |
派生ビューが forward_range を満たす場合に、派生ビューの最初の要素を返す( std::ranges::view_interface<D> の public メンバ関数) | |
派生ビューが bidirectional_range と common_range の両方を満たす場合にのみ、派生ビューの最後の要素を返す( std::ranges::view_interface<D> の public メンバ関数) | |
[編集] 推論ガイド
[編集] 入れ子クラス
| イテレータ型 (説明専用メンバクラステンプレート*) | |
| センチネル型 (説明専用メンバクラステンプレート*) |
[編集] 備考
| 機能テストマクロ | 値 | 規格 | 機能 |
|---|---|---|---|
__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) |
rangeのviewをフラット化して得られるシーケンスからなる view(クラステンプレート) (rangeアダプタオブジェクト) |
適合するviewを連結して構成される view(クラステンプレート) (カスタマイゼーションポイントオブジェクト) |