Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
Определено в заголовочном файле <ranges>
template < ranges:: view V, class Pred >

требует 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) (начиная с C++20)
namespace views {

inline constexpr /*unspecified*/ take_while = /*unspecified*/ ;

}
(2) (начиная с C++20)
Сигнатура вызова
template < ranges:: viewable_range R, class Pred >

требует /* см. ниже */

constexpr ranges:: view auto take_while ( R && r, Pred && pred ) ;
(начиная с C++20)
template < class Pred >
constexpr /*range adaptor closure*/ take_while ( Pred && pred ) ;
(начиная с C++20)
1) Адаптер диапазона, представляющий view элементов из базовой последовательности, начинающийся с начала и заканчивающийся на первом элементе, для которого предикат возвращает 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_range , когда базовое представление V моделирует соответствующие концепции.

Содержание

Члены данных

Участник Описание
V base_ (private) базовое представление
( объект-член только для демонстрации* )
copyable-box <Pred> (until C++23) movable-box <Pred> (since C++23) pred_ (private) базовый функциональный объект
( объект-член только для демонстрации* )

Функции-члены

создает take_while_view
(публичная функция-член)
возвращает копию базового (адаптированного) представления
(публичная функция-член)
возвращает ссылку на сохраненный предикат
(публичная функция-член)
возвращает итератор на начало
(публичная функция-член)
возвращает страж, представляющий конец
(публичная функция-член)
Наследуется от std::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> )

Руководства по выводу

Вложенные классы

тип sentinel
( только для демонстрации (exposition-only member class template*) )

Примечания

Для forward_iterator s , views :: take_while ( v, pred ) аналогично ranges:: subrange { ranges:: begin ( v ) , ranges:: find_if_not ( v, pred ) } , но последний вызывает pred только во время конструирования (в то время как первый вызывает pred каждый раз, когда корректный итератор take_while сравнивается с sentinel).

Пример

#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
(шаблон класса) (объект адаптера диапазона)