std::ranges::split_view<V,Pattern>::iterator
来自 cppreference.com
< cpp | ranges | split view
class /*iterator*/; |
(自 C++20 起) (仅供说明*) |
|
split_view::begin 的返回值类型。这是一个 forward_iterator
,因此期望 V 至少建模 forward_range
。
内容 |
[edit] 成员类型
成员类型 | 定义 |
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> |
[edit] 数据成员
成员名称 | 定义 |
parent_ (私有) |
类型为 ranges::split_view<V, Pattern>* 的指针,指向父 split_view 对象。 (仅供说明成员对象*) |
cur_ (私有) |
类型为 ranges::iterator_t<V> 的迭代器,指向底层 view ,指向当前子范围的开头。(仅供说明成员对象*) |
next_ (私有) |
类型为 ranges::subrange<ranges::iterator_t<V>> 的子范围,指向紧挨着当前子范围的模式的位置。 (仅供说明成员对象*) |
trailing_empty_ (私有) |
一个布尔标志,指示是否到达了一个空的尾随子范围(如果有)。 (仅供说明成员对象*) |
[edit] 成员函数
(构造函数) (C++20) |
构造一个迭代器 (公共成员函数) |
base (C++20) |
返回底层迭代器 (公共成员函数) |
operator* (C++20) |
返回当前子范围 (公共成员函数) |
operator++operator++(int) (C++20) |
使迭代器前进 (公共成员函数) |
std::ranges::split_view::iterator::iterator
/*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
constexpr const ranges::iterator_t<V> base() const; |
(自 C++20 起) | |
等效于 return cur_;.
std::ranges::split_view::iterator::operator*
constexpr ranges::range_reference_t<V> operator*() const; |
(自 C++20 起) | |
等效于 return {cur_, next_.begin()};.
std::ranges::split_view::iterator::operator++
constexpr /*iterator*/& operator++(); |
(1) | (自 C++20 起) |
constexpr void operator++( int ); |
(2) | (自 C++20 起) |
1) 等效于
cur_ = next_.begin();
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;
2) 等效于 auto tmp = *this; ++*this; return tmp;.
[编辑] 非成员函数
operator== (C++20) |
比较底层的迭代器 (函数) |
operator==(std::ranges::split_view::iterator, std::ranges::split_view::iterator)
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 是参数的关联类时,才能通过 依赖于参数的查找 找到。