名前空間
変種
操作

std::ranges::views::join, std::ranges::join_view

From cppreference.com
< cpp‎ | ranges
 
 
Rangesライブラリ
Rangeアダプタ
 
 
ヘッダ <ranges> で定義
template< ranges::input_range V >

    requires ranges::view<V> and
             ranges::input_range<ranges::range_reference_t<V>>
class join_view

    : public ranges::view_interface<join_view<V>>
(1) (C++20以降)
namespace views {

    inline constexpr /* unspecified */ join = /* unspecified */;

}
(2) (C++20以降)
呼び出しシグネチャ
template< ranges::viewable_range R >

    requires /* 以下を参照 */

constexpr ranges::view auto join( R&& r );
(C++20以降)
1) 範囲のビューを平坦化することによって得られるシーケンスから構成される view を表す範囲アダプタ。
2) RangeAdaptorObject (および RangeAdaptorClosureObject)。任意の適切な部分式 e に対して、式 views::join(e)式同等join_view<views::all_t<decltype((e))>>{e} となります。

join_viewinput_range をモデル化します。

join_view は、次の条件で forward_range をモデル化します。

join_view は、次の条件で bidirectional_range をモデル化します。

join_view は、次の条件で common_range をモデル化します。

目次

[編集] メンバ関数

join_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_rangecommon_range の両方を満たす場合にのみ、派生ビューの最後の要素を返す
(std::ranges::view_interface<D> の public メンバ関数) [編集]

[編集] 推論補助

[編集] ネストされたクラス

イテレータ型
(説明専用メンバクラステンプレート*)
センチネル型
(説明専用メンバクラステンプレート*)

[編集] 備考

P2328R1 が採択される前は、内部範囲型 (ranges::range_reference_t<V>) はコンテナ型にはなれませんでした (ただし、コンテナへの参照は可能でした)。例えば、std::string prvalue の transform_view を結合することは許可されていませんでした。

struct Person { int age; std::string name; };
 
auto f(std::vector<Person>& v) {
//  return v | std::views::transform([](auto& p){ return p.name; })
//           | std::views::join; // error before P2328R1
    return v | std::views::transform([](auto& p) -> std::string& { return p.name; })
             | std::views::join; // OK
}

[編集]

#include <iostream>
#include <ranges>
#include <string_view>
#include <vector>
 
int main()
{
    using namespace std::literals;
 
    const auto bits = {"https:"sv, "//"sv, "cppreference"sv, "."sv, "com"sv};
    for (char const c : bits | std::views::join)
        std::cout << c;
    std::cout << '\n';
 
    const std::vector<std::vector<int>> v{{1, 2}, {3, 4, 5}, {6}, {7, 8, 9}};
    auto jv = std::ranges::join_view(v);
    for (int const e : jv)
        std::cout << e << ' ';
    std::cout << '\n';
}

出力

https://ja.cppreference.dev
1 2 3 4 5 6 7 8 9

[編集] 欠陥報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 3474 C++20 views::join(e) は、ejoin_view の場合に e のコピーを返していた。 ネストされた join_view を返す
P2328R1 C++20 ビューではない range prvalue は join_view によって結合できなかった。 結合可能になった。

[編集] 関連項目

rangeのviewをフラット化し、要素の間に区切り文字を挟んで得られるシーケンスからなる view
(クラステンプレート) (rangeアダプタオブジェクト)[編集]
適合するviewを連結して構成される view
(クラステンプレート) (カスタマイゼーションポイントオブジェクト)[編集]
English 日本語 中文(简体) 中文(繁體)