std::ranges::filter_view<V,Pred>::iterator
class /*iterator*/; | (с C++20) (только для примера*) |
Тип возвращаемого значения для filter_view::begin.
Этот итератор является двунаправленным итератором, если V соответствует двунаправленному диапазону, прямым итератором, если V соответствует прямому диапазону, и входным итератором в противном случае.
Изменение элемента, обозначаемого этим итератором, разрешено, но приводит к неопределенному поведению, если полученное значение не удовлетворяет предикату фильтра.
Типы членов
| Тип члена | Определение |
|---|---|
iterator_concept |
|
iterator_category | Определяется тогда и только тогда, когда
|
value_type | ranges::range_value_t<V> |
difference_type | ranges::range_difference_t<V> |
Члены данных
| Название члена | Определение |
|---|---|
current_ (private) | Итератор типа ranges::iterator_t<V> в базовом view.(только для примера*) |
parent_ (private) | Указатель типа ranges::filter_view<V, Pred>* на родительский объект filter_view.(только для примера*) |
Члены-функции
|
(C++20) | создаёт итератор (общедоступная функция-член) |
|
(C++20) | возвращает базовый итератор (общедоступная функция-член) |
|
(C++20) | перенаправляет вызовы к базовому итератору (общедоступная функция-член) |
|
(C++20) | продвигает итератор (общедоступная функция-член) |
|
(C++20) | уменьшает итератор (общедоступная функция-член) |
std::ranges::filter_view::iterator::iterator
/*iterator*/() requires std::default_initializable<ranges::iterator_t<V>> = default; | (1) | (с C++20) |
constexpr /*iterator*/( filter_view& parent,
ranges::iterator_t<V> current );
| (2) | (с C++20) |
current_ и parent_ своими значениями по умолчанию, которые являются = ranges::iterator_t<V>() и = nullptr соответственно.std::ranges::filter_view::iterator::base
constexpr const ranges::iterator_t<V>& base() const & noexcept; | (1) | (с C++20) |
constexpr ranges::iterator_t<V> base() &&; | (2) | (с C++20) |
return current_;.return std::move(current_);. std::ranges::filter_view::iterator::operator*,->
constexpr ranges::range_reference_t<V> operator*() const; | (1) | (с C++20) |
constexpr ranges::iterator_t<V> operator->() const
requires /*has-arrow*/<ranges::iterator_t<V>> &&
std::copyable<ranges::iterator_t<V>>;
| (2) | (с C++20) |
return *current_;.return current_;.Для типа
I, /*has-arrow*/<I> удовлетворяется, если и только если I соответствует input_iterator соответственно, и либо I — тип указателя, либо requires(I i){ i.operator->();} — true. std::ranges::filter_view::iterator::operator++
constexpr /*iterator*/& operator++(); | (1) | (с C++20) |
constexpr void operator++( int ); | (2) | (с C++20) |
constexpr /*iterator*/ operator++( int ) requires ranges::forward_range<V>; | (3) | (с C++20) |
current_ = ranges::find_if(std::move(++current_), ranges::end(parent_->base_),
std::ref(*parent_->pred_));
return *this;.++*this;.auto tmp = *this; ++*this; return tmp;. std::ranges::filter_view::iterator::operator--
constexpr /*iterator*/& operator--() requires ranges::bidirectional_range<V>; | (1) | (с C++20) |
constexpr /*iterator*/ operator--( int ) requires ranges::bidirectional_range<V>; | (2) | (с C++20) |
auto tmp = *this; --*this; return tmp;. Функции без указания класса
|
(C++20) | сравнивает базовые итераторы (функция) |
|
(C++20) | преобразует результат обращение к базовому итератору к соответствующему типу rvalue-ссылки (функция) |
|
(C++20) | меняет местами объекты, на которые указывают два базовых итератора (функция) |
operator==(std::ranges::filter_view::iterator)
friend constexpr bool operator==( const /*iterator*/& x, const /*iterator*/& y ) requires std::equality_comparable<ranges::iterator_t<V>>; | (с C++20) |
Эквивалентно return x.current_ == y.current_;.
Оператор != синтезируется из operator==.
Эта функция не видна для обычного неквалифицированного или квалифицированного поиска и может быть найдена только с помощью поиска с зависимостью от аргументов, когда std::ranges::filter_view::iterator является связанным классом аргументов.
iter_move(std::ranges::filter_view::iterator)
friend constexpr ranges::range_rvalue_reference_t<V>
iter_move( const /*iterator*/& i )
noexcept(noexcept(ranges::iter_move(i.current_)));
| (с C++20) |
Эквивалентно return ranges::iter_move(i.current_);.
Эта функция не видна для обычного неквалифицированного или квалифицированного поиска и может быть найдена только с помощью поиска с зависимостью от аргументов, когда std::ranges::filter_view::iterator является связанным классом аргументов.
iter_swap(std::ranges::filter_view::iterator)
friend constexpr void iter_swap( const /*iterator*/& x, const /*iterator*/& y )
noexcept(noexcept(ranges::iter_swap(x.current_, y.current_)))
requires std::indirectly_swappable<ranges::iterator_t<V>>;
| (с C++20) |
Эквивалентно ranges::iter_swap(x.current_, y.current_).
Эта функция не видна для обычного неквалифицированного или квалифицированного поиска и может быть найдена только с помощью поиска с зависимостью от аргументов, когда std::ranges::filter_view::iterator является связанным классом аргументов.
Отчеты об ошибках
Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение, как опубликовано | Корректное поведение |
|---|---|---|---|
| P2259R1 | C++20 | тип члена iterator_category всегда был определен | определен только если V является forward_range |
| LWG 3533 | C++20 | перегрузка const& функции base копировала базовый итератор | возвращает ссылку на него |
| LWG 3593 | C++20 | перегрузка const& функции base могла не быть noexcept | сделана noexcept |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/ranges/filter_view/iterator