std::ranges::split_view<V,Pattern>::迭代器 (iterator)
來自 cppreference.com
< cpp | ranges | split view
class /*迭代器*/; |
(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_ (私有) |
指向父 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)
/*迭代器*/() = default; |
(1) | (C++20 起) |
constexpr /*迭代器*/( 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 value_type operator*() const; |
(C++20 起) | |
等價於 return {cur_, next_.begin()};。
std::ranges::split_view::迭代器 (iterator)::operator++
constexpr /*迭代器*/& 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 /*迭代器*/& x, const /*迭代器*/& y ); |
(C++20 起) | |
等價於 return x.cur_ == y.cur_ and x.trailing_empty_ == y.trailing_empty_;。
!=
運算子由 operator==
合成。
此函式對於普通 非限定查詢 或 限定查詢 不可見,只能透過 實參依賴查詢 在 std::ranges::split_view::迭代器 (iterator)
是實參的關聯類時找到。