std::ranges::lazy_split_view<V, Pattern>::inner_iterator
template< bool Const > struct /*inner_iterator*/; |
(C++20 起) (僅作說明*) |
|
lazy_split_view::
outer_iterator
::value_type::begin()的返回型別。
Const
匹配 outer_iterator
的模板引數。
[編輯] 成員型別
成員 | 定義 |
Base
|
maybe-const <Const, V>(僅供說明的成員型別*) |
iterator_concept
|
|
iterator_category (有條件存在) |
僅當
|
value_type
|
ranges::range_value_t<Base> |
difference_type
|
ranges::range_difference_t<Base> |
[編輯] 資料成員
成員 | 描述 |
outer_iterator <Const> i_ (私有) |
指向父物件 lazy_split_view 的底層 view 的迭代器(僅用於闡釋的成員物件*) |
bool incremented_ (私有) |
一個標誌,指示是否至少一次在此物件上呼叫了 operator++ (僅用於闡釋的成員物件*) |
[編輯] 成員函式
(建構函式) (C++20) |
構造一個迭代器 (公開成員函式) |
base (C++20) |
返回底層迭代器 (公開成員函式) |
operator* (C++20) |
返回當前元素 (公開成員函式) |
operator++operator++(int) (C++20) |
前進迭代器 (公開成員函式) |
[編輯] 成員函式
std::ranges::lazy_split_view::inner_iterator::inner_iterator
/*inner_iterator*/() = default; |
(1) | (C++20 起) |
constexpr explicit /*inner_iterator*/( /*outer_iterator*/<Const> i ); |
(2) | (C++20 起) |
資料成員 incremented_
透過其預設成員初始化器初始化為 false。
std::ranges::lazy_split_view::inner_iterator::base
constexpr const ranges::iterator_t<Base>& base() const & noexcept; |
(1) | (C++20 起) |
constexpr ranges::iterator_t<Base> base() && requires ranges::forward_range<V>; |
(2) | (C++20 起) |
返回底層迭代器的副本。
std::ranges::lazy_split_view::inner_iterator::operator*
constexpr decltype(auto) operator*() const; |
(C++20 起) | |
返回底層迭代器指向的元素。
等價於 return *i_./*cur*/();。
std::ranges::lazy_split_view::inner_iterator::operator++
constexpr /*inner_iterator*/& operator++(); |
(1) | (C++20 起) |
constexpr decltype(auto) operator++(int); |
(2) | (C++20 起) |
incremented_ = true;
if constexpr (!ranges::forward_range<Base>)
{
if constexpr (Pattern::size() == 0)
return *this;
}
++i_./*cur*/();
if constexpr (ranges::forward_range<Base>)
{
auto tmp = *this;
++*this;
return tmp;
}
else
++*this; // 無 return 語句
[編輯] 非成員函式
operator== (C++20) |
比較迭代器或迭代器與 std::default_sentinel (函式) |
iter_move (C++20) |
將底層迭代器解引用的結果轉換為其關聯的右值引用型別 (函式) |
iter_swap (C++20) |
交換兩個底層迭代器指向的物件 (函式) |
operator==(std::ranges::split_view::inner_iterator)
friend constexpr bool operator==( const /*inner_iterator*/& x, const /*inner_iterator*/& y ) |
(1) | (C++20 起) |
friend constexpr bool operator==( const /*inner_iterator*/& x, std::default_sentinel_t ); |
(2) | (C++20 起) |
auto [pcur, pend] = ranges::subrange{x.i_.parent_->pattern_}; auto end = ranges::end(x.i_.parent_->base_); if constexpr (/*tiny_range*/<Pattern>) { const auto& cur = x.i_./*cur*/(); if (cur == end) return true; if (pcur == pend) return x.incremented_; return *cur == *pcur; } else { auto cur = x.i_./*cur*/(); if (cur == end) return true; if (pcur == pend) return x.incremented_; do { if (*cur != *pcur) return false; if (++pcur == pend) return true; } while (++cur != end); return false; }
!=
運算子由 operator==
合成。
這些函式對於普通的非限定查詢或限定查詢不可見,並且只有當 std::ranges::split_view::inner_iterator
是引數的關聯類時,才能透過實參依賴查詢找到。
iter_move(std::ranges::split_view::inner_iterator)
friend constexpr decltype(auto) iter_move( const /*inner_iterator*/& i ) noexcept(noexcept(ranges::iter_move(i.i_./*cur*/()))); |
(C++20 起) | |
等價於 return ranges::iter_move(i.i_./*cur*/());。
此函式對於普通的非限定查詢或限定查詢不可見,並且只有當 std::ranges::split_view::inner_iterator
是引數的關聯類時,才能透過實參依賴查詢找到。
iter_swap(std::ranges::split_view::inner_iterator)
friend constexpr void iter_swap( const /*inner_iterator*/& x, const /*inner_iterator*/& y ) |
(C++20 起) | |
等價於 ranges::iter_swap(x.i_./*cur*/(), y.i_./*cur*/())。
此函式對於普通的非限定查詢或限定查詢不可見,並且只有當 std::ranges::split_view::inner_iterator
是引數的關聯類時,才能透過實參依賴查詢找到。
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 3591 | C++20 | base 的 && 過載可能使外部迭代器失效 |
已新增約束 |
LWG 3593 | C++20 | base 的 const& 過載返回引用,但可能不是 noexcept |
已改為 noexcept |