std::ranges:: views:: take_while, std::ranges:: take_while_view
|
Определено в заголовочном файле
<ranges>
|
||
|
template
<
ranges::
view
V,
class
Pred
>
требует
ranges::
input_range
<
V
>
&&
|
(1) | (начиная с C++20) |
|
namespace
views
{
inline
constexpr
/*unspecified*/
take_while
=
/*unspecified*/
;
|
(2) | (начиная с C++20) |
|
Сигнатура вызова
|
||
|
template
<
ranges::
viewable_range
R,
class
Pred
>
требует
/* см. ниже */
|
(начиная с C++20) | |
|
template
<
class
Pred
>
constexpr /*range adaptor closure*/ take_while ( Pred && pred ) ; |
(начиная с C++20) | |
view
элементов из базовой последовательности, начинающийся с начала и заканчивающийся на первом элементе, для которого предикат возвращает
false
.
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!
Смотрите также
|
(C++20)
|
представление,
view
состоящее из первых N элементов другого
view
(шаблон класса) (объект адаптера диапазона) |
представление,
view
состоящее из элементов другого
view
, пропускающее начальную подпоследовательность элементов до первого элемента, где предикат возвращает
false
(шаблон класса) (объект адаптера диапазона) |