Поделиться через


drop_while_view class (стандартная библиотека C++)

Представление, содержащее элементы диапазона, которые остаются после удаления ведущих элементов, соответствующих предикату.

Синтаксис

template<ranges::view V, class P>
    requires ranges::input_range<V> &&
             std::is_object_v<P> &&
             std::indirect_unary_predicate<const P, ranges::iterator_t<V>>
class drop_while_view : public ranges::view_interface<drop_while_view<V, P>>;

Параметры шаблона

V
Тип базового представления.

P
Тип предиката, определяющего ведущие элементы для удаления.

Просмотр характеристик

Описание следующих записей см. в разделе "Просмотр характеристик класса"

Characteristic Description
Адаптер диапазона views::drop_while
Базовый диапазон Должен соответствовать forward_range или выше, а итераторы базового диапазона должны моделировать sized_sentinel_for
Тип элемента Совпадает с базовым диапазоном
Просмотр категории итератора Совпадает с базовым диапазоном
Размер Только если базовый диапазон удовлетворяет random_access_range
Is const-iterable No
Общий диапазон Только если базовый диапазон удовлетворяет common_range
Заимствуемый диапазон Только если базовый диапазон удовлетворяет borrowed_range

Участники

Функции-члены Description
Конструкторы Создайте представление.
base Получите базовое представление.
begin Получите итератор к первому элементу.
end Получите sentinel в конце представления.
pred Получите ссылку на предикат, определяющий, какие элементы нужно удалить.
Наследуется от view_interface Description
backC++20 Получите последний элемент.
dataC++20 Получите указатель на первый элемент.
emptyC++20 Проверьте, является ли представление пустым.
frontC++20 Получите первый элемент.
operator[]C++20 Получите элемент в указанной позиции.
operator boolC++20 Проверьте, не является ли представление пустым.
size Получение количества элементов в представлении.

Требования

Заголовок: <ranges> (с C++20)

Пространство имен: std::ranges

Параметр компилятора: /std:c++20 или более поздней версии требуется.

Конструкторы

Создание экземпляра drop_while_viewобъекта .

1) constexpr drop_while_view(V base, P pred);
2) drop_while_view() requires default_initializable<V> && default_initializable<P> = default;

Параметры

base
Базовый диапазон.

pred
Предикат, определяющий ведущие элементы для удаления.

Сведения о типах параметров шаблона см. в разделе "Параметры шаблона".

Возвращаемое значение

Экземпляр класса drop_while_view.

Замечания

Лучший способ создания drop_while_view — использовать views::drop_while адаптер диапазона. Адаптеры диапазона — это способ создания классов представления. Типы представлений предоставляются в случае, если вы хотите создать собственный тип пользовательского представления.

1) Перемещение конструкций drop_while_view base из представления и pred предиката. Оба base и pred перемещаются через std::move().
2) По умолчанию создает объект drop_while_view.

Пример: drop_while_view

// requires /std:c++20 or later
#include <ranges>
#include <vector>
#include <iostream>

void print(auto v)
{
    for (auto& x : v)
    {
        std::cout << x << ' ';
    }
    std::cout << '\n';
}

int main()
{
    std::vector<int> v{ 0, 1, 2, 3, -4, 5, 6 };
    auto myView = std::views::drop_while(
        v,
        [](int i) {return i >= 0; });
    print(myView); // -4 5 6

    auto myView2 = v | std::views::drop_while(
        [](int i) {return i < 5; });
    print(myView2); // 5 6
}
-4 5 6
5 6

base

Получите базовое представление.

// Uses a copy constructor to return the underlying view
constexpr V base() const& requires std::copy_constructible<V>;

// Uses std::move() to return the underlying view
constexpr V base() &&;

Параметры

Нет.

Возвраты

Базовое представление.

begin

Получите итератор к первому элементу в представлении.

constexpr auto begin();

Возвращаемое значение

Итератор, указывающий на первый элемент в представлении. Поведение не определено, если представление не имеет предиката.

Изображение вектора с элементами 10, 20 и 30. Первый элемент содержит 10 и помечен как begin(). Последний элемент содержит 30 и помечен как последний элемент. Мнимый прямоугольник после последнего элемента указывает sentinel и обозначает конец().

end

Получите sentinel в конце представления.

constexpr auto end()

Возвращаемое значение

Sentinel, следующий за последним элементом в представлении:

Изображение вектора с элементами 10, 20 и 30. Первый элемент содержит 10 и помечен как begin(). Последний элемент содержит 30 и помечен как последний элемент. Мнимый прямоугольник после последнего элемента указывает 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::drop_while(
        [](int i) {return i < 5; }); // drop the leading elements < 5
    std::cout << std::boolalpha << mv.pred()(v[6]); // outputs "false" because v[6] = 6 and 6 is not less than 5 (the predicate)
}
false

См. также

<ranges>
drop_while адаптер диапазона
take_while адаптер диапазона
take_while_view
Классы представления