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
( объект-член только для демонстрации* ) |
Функции-члены
|
создает итератор
(public member function) |
|
|
возвращает базовый итератор
(public member function) |
|
|
перенаправляет к базовому итератору
(public member function) |
|
|
продвигает итератор
(public member function) |
|
|
декрементирует итератор
(public member function) |
std::ranges::filter_view:: iterator :: iterator
|
/*iterator*/
(
)
requires std:: default_initializable < ranges:: iterator_t < V >> = default ; |
(1) | (since C++20) |
|
constexpr
/*iterator*/
(
filter_view
&
parent,
ranges:: iterator_t < V > current ) ; |
(2) | (since 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) |
std::ranges::filter_view:: iterator :: operator*,->
|
constexpr
ranges::
range_reference_t
<
V
>
operator
*
(
)
const
;
|
(1) | (since C++20) |
|
constexpr
ranges::
iterator_t
<
V
>
operator
-
>
(
)
const
requires
/*has-arrow*/
<
ranges::
iterator_t
<
V
>>
&&
|
(2) | (since C++20) |
Для типа
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 ; .
std::ranges::filter_view:: iterator :: operator--
|
constexpr
/*iterator*/
&
operator
--
(
)
requires ranges:: bidirectional_range < V > ; |
(1) | (since C++20) |
|
constexpr
/*iterator*/
operator
--
(
int
)
requires ranges:: bidirectional_range < V > ; |
(2) | (since C++20) |
do
-- current_ ;
while ( ! std:: invoke ( * parent_ - > pred_, * current_ ) ) ;
return * this ; .
Функции, не являющиеся членами класса
|
(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 >> ; |
(since 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
)
|
(since 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_
)
)
)
|
(since C++20) | |
Эквивалентно ranges:: iter_swap ( x. current_ , y. current_ ) .
Эта функция не видна при обычном
неквалифицированном поиске
или
квалифицированном поиске
и может быть найдена только с помощью
поиска, зависимого от аргументов
, когда
std::ranges::filter_view::
iterator
является ассоциированным классом аргументов.
Отчёты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение как опубликовано | Корректное поведение |
|---|---|---|---|
| P2259R1 | C++20 |
member type
iterator_category
was always defined
|
defined only if
V
is a
forward_range
|
| LWG 3533 | C++20 |
the
const
&
overload of
base
copied the underlying iterator
|
returns a reference to it |
| LWG 3593 | C++20 |
the
const
&
overload of
base
might not be noexcept
|
made noexcept |