take_while_view
class (стандартная библиотека C++)
Представление, содержащее ведущие элементы диапазона, соответствующего предикату.
Синтаксис
template<view V, class Pred> requires
input_range<V> && is_object_v<Pred> &&
indirect_unary_predicate<const Pred, iterator_t<V>>
class take_while_view : public view_interface<take_while_view<V, Pred>>;
Параметры шаблона
Pred
Тип предиката, определяющего ведущие элементы, которые нужно поместить в представление.
V
Тип базового представления.
Просмотр характеристик
Описание следующих записей см. в разделе "Просмотр характеристик класса"
Characteristic | Description |
---|---|
Адаптер диапазона | views::take_while |
Базовый диапазон | Должно соответствовать input_range или выше |
Тип элемента | Совпадает с базовым диапазоном |
Просмотр категории итератора | Совпадает с базовым диапазоном |
Размер | No |
Is const -iterable |
Только если базовый диапазон является const итерируемым, и предикат может работать со const ссылками. |
Общий диапазон | No |
Заимствуемый диапазон | No |
Участники
Функции-члены | Description |
---|---|
КонструкторыC++20 | Создайте представление. |
base C++20 |
Получение базового диапазона. |
begin C++20 |
Получите итератор к первому элементу. |
end C++20 |
Получите sentinel в конце представления. |
pred C++20 |
Получите ссылку на предикат, определяющий, какие элементы нужно принимать. |
Наследуется от view_interface |
Description |
back C++20 |
Получите последний элемент. |
data C++20 |
Получите указатель на первый элемент. |
empty C++20 |
Проверьте, является ли представление пустым. |
front C++20 |
Получите первый элемент. |
operator[] C++20 |
Получите элемент в указанной позиции. |
operator bool C++20 |
Проверьте, не является ли представление пустым. |
size |
Получение количества элементов в представлении. |
Требования
Заголовок: <ranges>
(с C++20)
Пространство имен: std::ranges
Параметр компилятора: /std:c++20
или более поздней версии требуется.
Конструкторы
Создание экземпляра объекта take_while_view
1) take_while_view() requires
default_initializable<V> &&
default_initializable<Pred> = default;
2) constexpr take_while_view(V base, Pred pred);
Параметры
base
Базовое представление.
pred
Предикат, определяющий ведущие элементы, которые нужно поместить в представление.
Сведения о типах параметров шаблона см. в разделе "Параметры шаблона".
Возвращаемое значение
Объект take_while_view
.
Замечания
Лучший способ создания take_while_view
— использовать views::take_while
адаптер диапазона. Адаптеры диапазона — это способ создания классов представления. Типы представлений предоставляются в случае, если вы хотите создать собственный тип пользовательского представления.
1) Перемещение конструкций take_while_view
base
из представления и pred
предиката. Оба base
и pred
перемещаются через std::move()
.
2) Создает пустое take_while_view
. Базовое представление и предикат создаются по умолчанию.
Пример: take_while_view
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v{0, 1, 2, 3, -4, 5, 6};
auto twv = std::views::take_while(v, [](int i) {return i >= 0; });
for (auto& e : twv)
{
std::cout << e << ' '; // 0 1 2 3
}
std::cout << '\n';
// Using the '|' operator to create a take_view
for (auto i : v | std::views::take_while([](int i) {return i < 5; }))
{
std::cout << i << ' '; // 0 1 2 3 -4
}
}
0 1 2 3
0 1 2 3 -4
base
Получает копию базового представления.
// Uses a copy constructor to return the underlying view
1) constexpr V base() const& requires std::copy_constructible<V>;
// Uses a move constructor to return the underlying view
2) constexpr V base() &&;
Параметры
Нет.
Возвраты
Копия базового представления.
begin
Получите итератор к первому элементу в представлении.
1) constexpr auto begin() requires (!Simple_view<V>);
2) constexpr auto begin() const requires
range<const V> &&
indirect_unary_predicate<const Pred, iterator_t<const V>>
Параметры
Нет.
Возвращаемое значение
Итератор, указывающий на первый элемент в представлении. Поведение не определено, если представление не имеет предиката.
Замечания
Для 1 требование означает, Simple_view
что представление V
и const V
имеют одинаковые итераторы и типы sentinel.
end
Получите sentinel в конце представления.
1) constexpr auto end() requires (!Simple_view<V>);
2) constexpr auto end() const requires
range<const V> &&
indirect_unary_predicate<const Pred, iterator_t<const V>
Параметры
Нет.
Возвращаемое значение
Sentinel, следующий за последним элементом в представлении.
Замечания
Для 1 требование означает, Simple_view
что представление V
и const V
имеют одинаковые итераторы и типы sentinel.
pred
Получите ссылку на предикат, используемый для выбора ведущих элементов в представлении.
constexpr const Pred& pred() const;
Возвращаемое значение
Ссылка на предикат, используемый для выбора ведущих элементов, которые нужно поместить в представление.
Пример: pred
.
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v{ 0, 1, 2, 3, -4, 5, 6 };
auto mv = v | std::views::take_while(
[](int i) {return i < 5; });
std::cout << std::boolalpha << mv.pred()(v[6]); // outputs false because v[6] = 6 and 6 is not less than 5 (the predicate)
}
См. также
<ranges>
take_view
take_while
адаптер диапазона
Классы представления