std::ranges::filter_view<V,Pred>::iterator
class /*iterator*/; |
(начиная с C++20) (только для описания*) |
Тип возвращаемого значения filter_view::begin.
Это bidirectional_iterator, если V моделирует bidirectional_range, forward_iterator, если V моделирует forward_range, и в противном случае input_iterator.
Изменение элемента, на который указывает этот итератор, разрешено, однако приводит к неопределённому поведению, если полученное значение не удовлетворяет предикату фильтра.
Типы-члены
| Тип | Определение |
|---|---|
iterator_concept |
|
iterator_category(присутствует только если V моделируетforward_range) | Пусть
|
value_type | ranges::range_value_t<V> |
difference_type | ranges::range_difference_t<V> |
Поля данных
| Член | Описание |
|---|---|
ranges::iterator_t<V> current_ (закрытый) | итератор базового view(объект-член, используемый только для описания*) |
ranges::filter_view<V,Pred>* parent_ (закрытый) | указатель на родительский объект filter_view(объект-член, используемый только для описания*) |
Функции-члены
| создаёт итератор (открытая функция-член) |
|
| возвращает базовый итератор (открытая функция-член) |
|
| перенаправляет вызов базовому итератору (открытая функция-член) |
|
| перемещает итератор вперёд (открытая функция-член) |
|
| перемещает итератор назад (открытая функция-член) |
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.current_ значением std::move(current), а parent_ — значением std::addressof(parent). 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) |
do--current_;while (!std::invoke(*parent_->pred_, *current_));return *this;. 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++.
| Отчёт об ошибке | Применяется к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| 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/cpp/ranges/filter_view/iterator