std::ranges::filter_view<V,Pred>:: iterator
|
class
/*iterator*/
;
|
(C++20 起)
( 仅用于说明* ) |
|
filter_view::begin 的返回类型。
当
V
满足
bidirectional_range
时,此为
bidirectional_iterator
;当
V
满足
forward_range
时,此为
forward_iterator
;否则为
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) | (since C++20) |
|
constexpr
/*iterator*/
(
filter_view
&
parent,
ranges:: iterator_t < V > current ) ; |
(2) | (since C++20) |
std::ranges::filter_view:: iterator :: base
|
constexpr
const
ranges::
iterator_t
<
V
>
&
base
(
)
const
&
noexcept
;
|
(1) | (since C++20) |
|
constexpr
ranges::
iterator_t
<
V
>
base
(
)
&&
;
|
(2) | (since 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
,当且仅当
I
分别建模或满足
input_iterator
,且
I
为指针类型或
requires
(
I i
)
{
i.
operator
-
>
(
)
;
} 为
true
时,
/*has-arrow*/
<
I
>
被建模或满足。
std::ranges::filter_view:: iterator :: operator++
|
constexpr
/*iterator*/
&
operator
++
(
)
;
|
(1) | (since C++20) |
|
constexpr
void
operator
++
(
int
)
;
|
(2) | (since C++20) |
|
constexpr
/*iterator*/
operator
++
(
int
)
requires ranges:: forward_range < V > ; |
(3) | (since 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)
|
将底层迭代器解引用结果转换为其关联的右值引用类型
(函数) |
|
(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 |
成员类型
iterator_category
始终被定义
|
仅当
V
为
forward_range
时定义
|
| LWG 3533 | C++20 |
base
的
const
&
重载会复制底层迭代器
|
返回其引用 |
| LWG 3593 | C++20 |
base
的
const
&
重载可能不是 noexcept
|
设为 noexcept |