Spec-Zone.ru › C++

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

Определено в заголовке <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) Объект-адаптер диапазона. Выражение 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_ (закрытый) базовое представление
(объект-член, используемый только для экспозиции*)

copyable-box<Pred>

(до C++23)

movable-box<Pred>

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

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

(конструктор)
создаёт take_while_view
(открытая функция-член)
base
возвращает копию базового (адаптированного) представления
(открытая функция-член)
pred
возвращает ссылку на сохранённый предикат
(открытая функция-член)
begin
возвращает итератор на начало
(открытая функция-член)
end
возвращает сентинел, обозначающий конец
(открытая функция-член)
Унаследовано от std::ranges::view_interface
empty
возвращает признак того, что производное представление пусто; доступна только при выполнении условия sized_range или forward_range
(открытая функция-член std::ranges::view_interface<D>)
cbegin
(C++23)
возвращает константный итератор на начало диапазона
(открытая функция-член std::ranges::view_interface<D>)
cend
(C++23)
возвращает сентинел для константного итератора диапазона
(открытая функция-член std::ranges::view_interface<D>)
operator bool
возвращает признак того, что производное представление не пусто; доступна только если к нему применимо ranges::empty
(открытая функция-член std::ranges::view_interface<D>)
data
получает адрес данных производного представления; доступна только если тип его итератора удовлетворяет требованиям contiguous_iterator
(открытая функция-член std::ranges::view_interface<D>)
front
возвращает первый элемент производного представления, если оно удовлетворяет требованиям forward_range
(открытая функция-член std::ranges::view_interface<D>)
operator[]
возвращает элемент производного представления с индексом n; доступна только если оно удовлетворяет требованиям random_access_range
(открытая функция-член std::ranges::view_interface<D>)

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

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

sentinel
тип сентинела
(шаблон класса-члена, используемый только для экспозиции*)

Примечания

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

Пример

#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!

См. также

ranges::take_viewviews::take
(C++20)
представление view, состоящее из первых N элементов другого view
(шаблон класса) (объект-адаптер диапазона)
ranges::drop_while_viewviews::drop_while
(C++20)
представление view, состоящее из элементов другого view без начальной подпоследовательности элементов до первого элемента, для которого предикат возвращает false
(шаблон класса) (объект-адаптер диапазона)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/take_while_view

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API