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_ (закрытый) | базовое представление (объект-член, используемый только для экспозиции*) |
||||
pred_ (закрытый) | базовый функциональный объект (объект-член, используемый только для экспозиции*) |
Функции-члены
создаёт take_while_view (открытая функция-член) |
|
| возвращает копию базового (адаптированного) представления (открытая функция-член) |
|
| возвращает ссылку на сохранённый предикат (открытая функция-член) |
|
| возвращает итератор на начало (открытая функция-член) |
|
| возвращает сентинел, обозначающий конец (открытая функция-член) |
|
Унаследовано от |
|
возвращает признак того, что производное представление пусто; доступна только при выполнении условия 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_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!
См. также
|
(C++20) | представление view, состоящее из первых N элементов другого view(шаблон класса) (объект-адаптер диапазона) |
|
(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