std::ranges::views::drop, std::ranges::drop_view
Определено в заголовке <ranges> | ||
|---|---|---|
template< ranges::view V >
class drop_view
: public ranges::view_interface<drop_view<V>>
| (1) | (с C++20) |
namespace views {
inline constexpr /* unspecified */ drop = /* unspecified */;
}
| (2) | (с C++20) |
| Подпись вызова | ||
template< ranges::viewable_range R >
requires /* see below */
constexpr ranges::view auto
drop( R&& r, ranges::range_difference_t<R> count );
| (с C++20) | |
template< class DifferenceType > constexpr /* range adaptor closure */ drop( DifferenceType&& count ); | (с C++20) |
1) Адаптер диапазона, состоящий из элементов базовой последовательности, пропускающих первые N элементов.
2)RangeAdaptorObject. Учитывая, что T является std::remove_cvref_t<decltype((e))> и D является ranges::range_difference_t<decltype((e))>), выражение views::drop(e, f) является эквивалентным с точки зрения выражений к: -
((void)f, decay-copy(e)), еслиTявляетсяranges::empty_view, за исключением того, что оценкиeиfвыполняются в неопределённой последовательности; - иначе,
T(ranges::begin(e) + inc, ranges::end(e),, если
/* to-unsigned-like */(ranges::distance(e) - inc))Tявляется специализацией ranges::subrange, которая моделирует какrandom_access_range, так иsized_range, иTнеобходимо хранить размер (см.ranges::subrange::subrangeдля подробностей), гдеincявляетсяstd::min<D>(ranges::distance(e), f); - иначе,
U(ranges::begin(e) + inc, ranges::end(e)), еслиTявляется специализацией std::span,std::basic_string_view, ranges::iota_view или ranges::subrange, которые моделируют какrandom_access_range, так иsized_range, гдеUявляется
| (с C++23) |
- иначе,
drop_view(e, f).
std::convertible_to<D>. drop_view моделирует концепции contiguous_range, random_access_range, bidirectional_range, forward_range, input_range, common_range и sized_range, когда базовый вид V моделирует соответствующие концепции.
Члены-функции
|
(C++20) | создаёт drop_view (публичный член-функция) |
|
(C++20) | возвращает копию базового (адаптированного) представления (публичный член-функция) |
|
(C++20) | возвращает итератор начала (публичный член-функция) |
|
(C++20) | возвращает итератор или маркер конца (публичный член-функция) |
|
(C++20) | возвращает количество элементов. Доступна только если базовый (адаптированный) диапазон удовлетворяет sized_range. (публичный член-функция) |
Унаследовано от |
|
|
(C++20) | возвращает, пусто ли производное представление. Доступно, если оно удовлетворяет sized_range или forward_range. (публичный член-функция std::ranges::view_interface<D>) |
|
(C++23) | возвращает константный итератор начала диапазона. (публичный член-функция std::ranges::view_interface<D>) |
|
(C++23) | возвращает маркер конца для константного итератора диапазона. (публичный член-функция std::ranges::view_interface<D>) |
|
(C++20) | возвращает, не пусто ли производное представление. Доступно, если ranges::empty применима к нему. (публичный член-функция std::ranges::view_interface<D>) |
|
(C++20) | получает адрес данных производного представления. Доступно, если тип его итератора удовлетворяет contiguous_iterator. (публичный член-функция std::ranges::view_interface<D>) |
|
(C++20) | возвращает первый элемент в производном представлении. Доступно, если оно удовлетворяет forward_range. (публичный член-функция std::ranges::view_interface<D>) |
|
(C++20) | возвращает последний элемент в производном представлении. Доступно, если оно удовлетворяет bidirectional_range и common_range. (публичный член-функция std::ranges::view_interface<D>) |
|
(C++20) | возвращает n-ый элемент в производном представлении. Доступно, если оно удовлетворяет random_access_range. (публичный член-функция std::ranges::view_interface<D>) |
Руководства по выводу типов
Вспомогательные шаблоны
template<class T>
inline constexpr bool enable_borrowed_range<std::ranges::drop_view<T>> =
std::ranges::enable_borrowed_range<T>;
| (с C++20) |
Эта специализация std::ranges::enable_borrowed_range делает drop_view удовлетворяющим borrowed_range, когда базовые представления удовлетворяют ему.
Пример
#include <iostream>
#include <ranges>
int main()
{
const auto nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};
for (int i : std::ranges::drop_view{nums, 2})
std::cout << i << ' ';
std::cout << '\n';
for (int i : nums | std::views::drop(2))
std::cout << i << ' ';
std::cout << '\n';
for (int i : std::views::iota(1, 10) | std::views::drop(2))
std::cout << i << ' ';
std::cout << '\n';
}Вывод:
3 4 5 6 7 8 9 3 4 5 6 7 8 9 3 4 5 6 7 8 9
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применён к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| LWG 3407 | C++20 |
views::drop иногда не удаётсясоздать упорядоченный диапазон случайного доступа | создание скорректировано, так что оно всегда допустимо |
| LWG 3494 | C++20 |
drop_view никогда не было borrowed_range | является borrowed_range если его базовая view таковым является |
См. также
|
(C++20) | a view состоящее из элементов другого view, пропускающее начальную последовательность элементов до первого элемента, где предикат возвращает false(шаблон класса) (объект адаптера диапазонов) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/ranges/drop_view