Namespaces
Variants

std::ranges::views::take_while, std::ranges::take_while_view

ja.cppreference.net より
 
 
レンジライブラリ
レンジアダプタ
 
 
ヘッダ <ranges>
template< ranges::view V, class Pred >
    requires ranges::input_range<V> &&
             std::is_object_v<Pred> &&
             std::indirect_unary_predicate<const Pred, ranges::iterator_t<V>>
class take_while_view
    : public ranges::view_interface<take_while_view<V, Pred>>
で定義 (1)
namespace views {
    inline constexpr /*unspecified*/ take_while = /*unspecified*/;
}
(C++20以上) (2)
(C++20以上)
template< ranges::viewable_range R, class Pred >
    requires /* see below */
constexpr ranges::view auto take_while( R&& r, Pred&& pred );
呼び出しシグネチャ
template< class Pred >
constexpr /*range adaptor closure*/ take_while( Pred&& pred );
(C++20以上)
(C++20以上)1) 元となるシーケンスの先頭から開始し、述語が を返す最初の要素の手前までを表す false のレンジアダプタ。
2) RangeAdaptorObject。式 views::take_while(e, f) は、任意の適切な部分式 と に対して、take_while_view(e, f) とe式等価fです。

take_while_view は、元となるビュー がそれぞれのコンセプトをモデル化する場合、コンセプト contiguous_range, random_access_range, bidirectional_range, forward_range, input_rangeV をモデル化します。

関連項目

データメンバ

メンバ 説明
V base_ (プライベート) 基盤となるビュー
(説明専用メンバオブジェクト*)

copyable-box<Pred>

(C++23まで)

movable-box<Pred>

(C++23以降)
pred_ (プライベート)
基盤となる関数オブジェクト
(説明専用メンバオブジェクト*)

メンバー関数

take_while_viewを構築する
(public member function)
基盤となる(アダプトされた)ビューのコピーを返す
(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> のパブリックメンバ関数)
派生ビューのデータのアドレスを取得します。ただし、そのイテレータ型が contiguous_iterator
を満たす場合に限ります。 (std::ranges::view_interface<D> のパブリックメンバ関数)
派生ビューの先頭要素を返します。ただし、派生ビューが forward_range
を満たす場合に限ります。 (std::ranges::view_interface<D> のパブリックメンバ関数)
派生ビューの n番目の要素を返します。ただし、派生ビューが random_access_range
を満たす場合に限ります。 (std::ranges::view_interface<D> のパブリックメンバ関数)

推論ガイド

ネストされたクラス

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

注記

forward_iterator s に対して、 views :: take_while ( v, pred ) は ranges:: subrange { ranges:: begin ( v ) , ranges:: find_if_not ( v, pred ) } と類似していますが、後者は構築時にのみ pred を呼び出すのに対し(前者は有効な take_while イテレータが番兵と比較されるたびに pred を呼び出します)。

例

#include <iostream>
#include <ranges>
int main()
{
    for (int year : std::views::iota(2020)
                  | std::views::take_while([](int y){ return y < 2026; }))
        std::cout << year << ' ';
    std::cout << '\n';
    const char note[]{"Today is yesterday's tomorrow!..."};
    auto not_dot = [](char c){ return c != '.'; };
    for (char x : std::ranges::take_while_view(note, not_dot))
        std::cout << x;
    std::cout << '\n';
}

出力:

2020 2021 2022 2023 2024 2025
Today is yesterday's tomorrow!

関連項目

別の view の最初のN個の要素から構成される view
(クラステンプレート) (レンジアダプタオブジェクト)
別の view の要素から構成される view 。述語が false を返す最初の要素までの初期部分列をスキップする
(クラステンプレート) (レンジアダプタオブジェクト)