std::ranges::split_view<V,Pattern>::iterator

来自cppreference.com
 
 
范围库
范围适配器
 
 
<tbody> </tbody>
class /*iterator*/;
(C++20 起)
(仅用于阐述*)

split_view::begin 的返回类型。这是一种 forward_iterator,因此预期 V 至少实现了 forward_range

成员类型

成员类型 定义
iterator_concept std::forward_iterator_tag
iterator_category std::input_iterator_tag
value_type ranges::subrange<ranges::iterator_t<V>>
difference_type ranges::range_difference_t<V>

数据成员

成员 描述
ranges::split_view<V, Pattern>* parent_ (私有) 指向父 ranges::split_view 对象的指针
(仅用于阐述的成员对象*)
ranges::iterator_t<V> cur_ (私有) 指向底层 view 中当前子范围的起始的迭代器
(仅用于阐述的成员对象*)
ranges::subrange<ranges::iterator_t<V>> next_ (私有) 表示当前子范围之后的模式位置的子范围
(仅用于阐述的成员对象*)
bool trailing_empty_ (私有) 指示是否抵达空尾部子范围(若存在)的标记
(仅用于阐述的成员对象*)

成员函数

(构造函数)
(C++20)
构造迭代器
(公开成员函数)
base
(C++20)
返回底层迭代器
(公开成员函数)
operator*
(C++20)
返回当前子范围
(公开成员函数)
operator++operator++(int)
(C++20)
推进迭代器
(公开成员函数)

std::ranges::split_view::iterator::iterator

<tbody> </tbody>
/*iterator*/() = default;
(1) (C++20 起)
constexpr /*iterator*/( split_view& parent, ranges::iterator_t<V> current, ranges::subrange<ranges::iterator_t<V>> next );
(2) (C++20 起)
1) 以各自的默认成员初始化式对各非静态数据成员进行值初始化,即:
  • ranges::split_view* parent_ = nullptr;
  • ranges::iterator_t<V> cur_ = ranges::iterator_t<V>();
  • ranges::subrange<ranges::iterator_t<V>> next_ = ranges::subrange<ranges::iterator_t<V>>();,以及
  • bool trailing_empty_ = false;
2) 初始化各非静态数据成员:
  • ranges::split_view* parent_ = std::addressof(parent);
  • ranges::iterator_t<V> cur_ = std::move(current);
  • ranges::subrange<ranges::iterator_t<V>> next_ = std::move(next);,以及
  • bool trailing_empty_ = false;

std::ranges::split_view::iterator::base

<tbody> </tbody>
constexpr const ranges::iterator_t<V> base() const;
(C++20 起)

等价于 return cur_;

std::ranges::split_view::iterator::operator*

<tbody> </tbody>
constexpr value_type operator*() const;
(C++20 起)

等价于 return {cur_, next_.begin()};

std::ranges::split_view::iterator::operator++

<tbody> </tbody>
constexpr /*iterator*/& operator++();
(1) (C++20 起)
constexpr void operator++( int );
(2) (C++20 起)
1) 等价于
cur_ = next_.begin(); if (cur_ != ranges::end(parent_->base_)) { if (cur_ = next_.end(); cur_ == ranges::end(parent_->base_)) { trailing_empty_ = true; next_ = {cur_, cur_}; } else next_ = parent_->find_next(cur_); } else trailing_empty_ = false; return *this;
2) 等价于 auto tmp = *this; ++*this; return tmp;

非成员函数

operator==
(C++20)
比较底层迭代器
(函数)

operator==(std::ranges::split_view::iterator, std::ranges::split_view::iterator)

<tbody> </tbody>
friend constexpr bool operator==( const /*iterator*/& x, const /*iterator*/& y );
(C++20 起)

等价于 return x.cur_ == y.cur_ and x.trailing_empty_ == y.trailing_empty_;

!= 运算符从 operator== 运算符合成

此函数对常规的无限定有限定查找不可见,而只能在 std::ranges::split_view::iterator 为实参的关联类时由实参依赖查找找到。