Namespaces
Variants

std::ranges:: views:: drop_while, std::ranges:: drop_while_view

From cppreference.net
Ranges library
Range adaptors
Определено в заголовочном файле <ranges>
template < ranges:: view V, class Pred >

требует ranges:: input_range < V > &&
std:: is_object_v < Pred > &&
std:: indirect_unary_predicate < const Pred, ranges:: iterator_t < V >>
class drop_while_view

: public ranges:: view_interface < drop_while_view < V, Pred >>
(1) (начиная с C++20)
namespace views {

inline constexpr /* неопределено */ drop_while = /* неопределено */ ;

}
(2) (начиная с C++20)
Сигнатура вызова
template < ranges:: viewable_range R, class Pred >

требует /* см. ниже */

constexpr ranges:: view auto drop_while ( R && r, Pred && pred ) ;
(начиная с C++20)
template < class Pred >
constexpr /*адаптер диапазона-замыкания*/ drop_while ( Pred && pred ) ;
(начиная с C++20)
1) Адаптер диапазона, представляющий view элементов из базовой последовательности, начиная с первого элемента, для которого предикат возвращает false .
2) RangeAdaptorObject . Выражение views :: drop_while ( e, f ) является эквивалентным по выражению к drop_while_view ( e, f ) для любых подходящих подвыражений e и f .

drop_while_view реализует концепции contiguous_range , random_access_range , bidirectional_range , forward_range , input_range и common_range , когда базовое представление V реализует соответствующие концепции. Также реализует sized_range если ranges:: forward_range < V > и std:: sized_sentinel_for < ranges:: sentinel_t < V > , ranges:: iterator_t < V >> реализованы.

Содержание

Члены данных

Элемент Описание
V base_ (private) базовое представление
( объект-член только для демонстрации* )
copyable-box <Pred> (until C++23) movable-box <Pred> (since C++23) pred_ (private) базовый функциональный объект
( объект-член только для демонстрации* )
non-propagating-cache < ranges:: iterator_t < V >> cache_ (private)
(присутствует только если V удовлетворяет forward_range )
объект, кэширующий результат begin()
( объект-член только для демонстрации* )

Функции-члены

создаёт drop_while_view
(public member function)
возвращает копию базового (адаптированного) представления
(public member function)
возвращает ссылку на сохранённый предикат
(public member function)
возвращает итератор на начало
(public member function)
возвращает итератор или страж на конец
(public member function)
Наследуется от std::ranges::view_interface
возвращает, является ли производное представление пустым, предоставляется только если оно удовлетворяет sized_range или forward_range
(public member function of std::ranges::view_interface<D> )
(C++23)
возвращает константный итератор на начало диапазона
(public member function of std::ranges::view_interface<D> )
(C++23)
возвращает страж для константного итератора диапазона
(public member function of std::ranges::view_interface<D> )
возвращает, является ли производное представление непустым, предоставляется только если ranges::empty применимо к нему
(public member function of std::ranges::view_interface<D> )
получает адрес данных производного представления, предоставляется только если его тип итератора удовлетворяет contiguous_iterator
(public member function of std::ranges::view_interface<D> )
возвращает количество элементов в производном представлении. Предоставляется, если оно удовлетворяет forward_range и его тип стража и итератора удовлетворяют sized_sentinel_for .
(public member function of std::ranges::view_interface<D> )
возвращает первый элемент в производном представлении, предоставляется, если оно удовлетворяет forward_range
(public member function of std::ranges::view_interface<D> )
возвращает последний элемент в производном представлении, предоставляется только если оно удовлетворяет bidirectional_range и common_range
(public member function of std::ranges::view_interface<D> )
возвращает n элемент в производном представлении, предоставляется только если оно удовлетворяет random_access_range
(public member function of std::ranges::view_interface<D> )

Руководства по выводу

Вспомогательные шаблоны

template < class T, class Pred >

constexpr bool enable_borrowed_range < std :: ranges :: drop_while_view < T, Pred >> =

ranges:: enable_borrowed_range < T > ;
(начиная с C++20)

Эта специализация std :: ranges:: enable_borrowed_range позволяет drop_while_view удовлетворять требованиям borrowed_range , когда базовое представление удовлетворяет им.

Примечания

Для обеспечения амортизированной постоянной временной сложности, требуемой концепцией range , результат вызова begin кэшируется внутри объекта drop_while_view . Если базовый диапазон изменяется после первого вызова begin() , последующие использования объекта drop_while_view могут демонстрировать неинтуитивное поведение.

Пример

#include <iostream>
#include <ranges>
#include <string>
#include <string_view>
using std::operator""sv;
[[nodiscard]]
constexpr bool is_space(char p) noexcept
{
    auto ne = [p](auto q) { return p != q; };
    return !!(" \t\n\v\r\f" | std::views::drop_while(ne));
};
[[nodiscard("trims the output")]]
constexpr std::string_view trim_left(std::string_view const in) noexcept
{
    auto view = in | std::views::drop_while(is_space);
    return {view.begin(), view.end()};
}
[[nodiscard("trims the output")]]
constexpr std::string trim(std::string_view const in)
{
    auto view = in
              | std::views::drop_while(is_space)
              | std::views::reverse
              | std::views::drop_while(is_space)
              | std::views::reverse
              ;
    return {view.begin(), view.end()};
}
int main()
{
    static_assert(trim_left(" \n C++23") == "C++23"sv);
    constexpr auto src{" \f\n\t\r\vHello, C++20!\f\n\t\r\v "sv};
    static_assert(trim(src) == "Hello, C++20!");
    static constexpr auto v = {0, 1, 2, 3, 4, 5};
    for (int n : v | std::views::drop_while([](int i) { return i < 3; }))
        std::cout << n << ' ';
    std::cout << '\n';
}

Вывод:

3 4 5

Отчеты о дефектах

Следующие отчеты об изменениях в поведении, являющиеся дефектами, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 3494 C++20 drop_while_view никогда не был borrowed_range он является borrowed_range если его базовое представление является таковым

Смотрите также

представление, view состоящее из элементов другого view , пропускающее первые N элементов
(шаблон класса) (объект адаптера диапазона)