Namespaces
Variants

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

С сайта ru.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) (начиная с C++20)
namespace views {
    inline constexpr /*unspecified*/ take_while = /*unspecified*/;
}
(2) (начиная с C++20)
Сигнатура вызова
template< ranges::viewable_range R, class Pred >
    requires /* see below */
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) является expression-equivalent к take_while_view(e, f) для любых подходящих подвыражений e и f.

take_while_view моделирует концепты contiguous_range, random_access_range, bidirectional_range, forward_range и input_range, когда базовое представление V моделирует соответствующие концепты.

Элементы данных

Элемент Описание
V base_ (закрытый) базовое представление
(объект-элемент, показанный для пояснения*)

copyable-box<Pred>

(до C++23)

movable-box<Pred>

(начиная с C++23)
pred_ (закрытый)
базовый функциональный объект
(объект-элемент, показанный для пояснения*)

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

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