std::ranges::filter_view<V,Pred>::iterator
|   class /*iterator*/; // 仅用于阐释  | 
(C++20 起) | |
filter_view::begin 的返回类型。名称 iterator 仅用于阐释目的。
若 V 实现 bidirectional_range 则这是 bidirectional_iterator ,若 V 实现 forward_range 则这是 forward_iterator ,否则是 input_iterator 。
容许修改此迭代器所指向的元素,但若结果值不满足滤的谓词则导致未定义行为。
成员类型
| 成员类型 | 定义 | 
  iterator_concept
 | 
  | 
  iterator_category
 | 
 当且仅当 V 实现  
  | 
  value_type
 | 
ranges::range_value_t<V> | 
  difference_type
 | 
ranges::range_difference_t<V> | 
数据成员
iterator 的典型实现保有二个非静态数据成员:
-  ranges::iterator_t<V> 类型迭代器,指向底层 
view中(此处示为current_,仅为阐释),及 -  ranges::filter_view<V, Pred>* 指针,指向亲 
filter_view对象(此处示为parent_,仅为阐释)。 
成员函数
|    (构造函数) (C++20)  | 
  构造迭代器  (公开成员函数)  | 
|    base (C++20)  | 
   返回底层迭代器   (公开成员函数)  | 
|    operator*operator-> (C++20)  | 
   转发到底层迭代器   (公开成员函数)  | 
|    operator++operator++(int)operator--operator--(int) (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 起) | 
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) | (C++20 起) | 
|   constexpr ranges::iterator_t<V> operator->() const   requires /*has-arrow*/<ranges::iterator_t<V>> &&  | 
(2) | (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_));
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 起) | 
非成员函数
|    operator== (C++20)  | 
   比较底层迭代器   (函数)  | 
|    iter_move (C++20)  | 
   将解引用底层迭代器的结果转型到其关联右值引用类型   (函数)  | 
|    iter_swap (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_; 。
!= 运算符从 == 运算符合成。
此函数对通常无限定或有限定查找不可见,而只能在 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 )  | 
(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_)))  | 
(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 |  base 的 const& 重载复制底层迭代器
 | 
返回到它的引用 | 
| LWG 3593 | C++20 |  base 的 const& 重载可能不是 noexcept
 | 
使之为 noexcept |