std::ranges::views::take_while, std::ranges::take_while_view
Материал из cppreference.com
Шаблон:cpp/ranges/take while view/navbar
<tbody> </tbody>| Определено в заголовочном файле <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) эквивалентно выражению take_while_view(e, f) для любых подходящих подвыражений e и f.take_while_view моделирует концепты contiguous_range, random_access_range, bidirectional_range, forward_range, и input_range когда базовое представление V моделирует соответствующие концепты.
Методы
Шаблон:cpp/ranges/adaptor/dsc pred(C++20) |
создает take_while_view (public функция-элемент) |
(C++20) |
возвращает копию основного (адаптированного) представления (public функция-элемент) |
(C++20) |
возвращает итератор на начало (public функция-элемент) |
(C++20) |
возвращает охранное выражение указывающее на конец (public функция-элемент) |
Унаследовано от ranges::view_interface | |
(C++20) |
возвращает является ли производное представление пустым. При условии, если это удовлетворяет sized_range или forward_range. (public функция-элемент std::ranges::view_interface<D>)
|
(C++23) |
возвращает константный итератор в начале диапазона. (public функция-элемент std::ranges::view_interface<D>)
|
(C++23) |
возвращает охранное выражение для константного итератора диапазона. (public функция-элемент std::ranges::view_interface<D>)
|
(C++20) |
возвращает, не является ли производное представление пустым. Существует, если ranges::empty применимо к нему. (public функция-элемент std::ranges::view_interface<D>)
|
(C++20) |
получает адрес данных производного представления. При условии, если тип его итератора удовлетворяет contiguous_iterator. (public функция-элемент std::ranges::view_interface<D>)
|
(C++20) |
возвращает первый элемент в производном представлении. При условии, если оно удовлетворяет forward_range. (public функция-элемент std::ranges::view_interface<D>)
|
(C++20) |
возвращает нный элемент в производном представлении. При условии, если оно удовлетворяет random_access_range. (public функция-элемент std::ranges::view_interface<D>)
|
Deduction guides
Вложенные классы
| охранное выражение (шаблон класса-элемента только для пояснения) |
Пример
Запустить этот код
#include <iostream>
#include <ranges>
int main()
{
for (int year : std::views::iota(2020)
| std::views::take_while([](int y) { return y <= 2023; }))
std::cout << year << ' ';
std::cout << '\n';
const char idea[] {"Today is yesterday's tomorrow!..."};
for (char x : std::ranges::take_while_view(idea, [](char c) { return c != '.'; }))
std::cout << x;
std::cout << '\n';
}
Вывод:
2020 2021 2022 2023
Today is yesterday's tomorrow!
Смотри также
(C++20) |
view, состоящий из первых N элементов другого view (шаблон класса) (объект адаптера диапазона) |
view, состоящий из элементов другого view, пропуская начальную подпоследовательность элементов до первого элемента, для которого предикат вернёт false (шаблон класса) (объект адаптера диапазона) |