名稱空間
變體
操作

std::ranges::join_with_view<V,Pattern>::iterator<Const>::operator++,--

來自 cppreference.com
 
 
範圍庫 (Ranges library)
範圍介面卡 (Range adaptors)
 
 
constexpr /*迭代器*/& operator++();
(1) (C++23 起)
constexpr void operator++( int );
(2) (C++23 起)
constexpr /*iterator*/ operator++( int )

    requires std::is_reference_v</*InnerBase*/> &&
             ranges::forward_range</*Base*/> &&

             ranges::forward_range</*InnerBase*/>;
(3) (C++23 起)
constexpr /*iterator*/& operator--()

    requires std::is_reference_v</*InnerBase*/> &&
             ranges::bidirectional_range</*Base*/> &&
             ranges::bidirectional_range</*InnerBase*/> &&
             ranges::common_range</*InnerBase*/> &&
             ranges::bidirectional_range</*PatternBase*/> &&

             ranges::common_range</*PatternBase*/>;
(4) (C++23 起)
constexpr /*iterator*/ operator--( int )

    requires std::is_reference_v</*InnerBase*/> &&
             ranges::bidirectional_range</*Base*/> &&
             ranges::bidirectional_range</*InnerBase*/> &&
             ranges::common_range</*InnerBase*/> &&
             ranges::bidirectional_range</*PatternBase*/> &&

             ranges::common_range</*PatternBase*/>;
(5) (C++23 起)

自增或自減迭代器。

1) 如同透過 std::visit(<自增內部迭代器/span>[](auto& it){ ++it; }, inner_it_ ); 一樣自增內部迭代器
此後,如下調整內部和外部迭代器:
  • 如果自增後的內部迭代器是模式範圍的尾後迭代器,則將其設定為指向下一個內層範圍起始的迭代器。
  • 如果自增後的內部迭代器是某個內層範圍的尾後迭代器,則自增外部迭代器。然後
  • 如果自增後的外部迭代器不是外部範圍的尾後迭代器,則將內部迭代器設定為指向模式範圍起始的迭代器。
  • 否則,若 std::is_reference_v<InnerBase >true,則將內部迭代器設定為持有奇異值的模式迭代器。
  • 重複上述操作,直到內部迭代器不是尾後迭代器,或外部迭代器是尾後迭代器。
2) 等價於 ++*this;
3) 等價於 auto tmp = *this;
++*this;
return tmp;
4) 如果外部迭代器是外部範圍的尾後迭代器,則自減它,並將內部迭代器設為最後內層範圍的尾後迭代器;否則什麼都不做。
此後,如下調整內部和外部迭代器:
  • 如果內部迭代器指代內層範圍的起始,則將其設為模式範圍的尾後迭代器。
  • 如果內部迭代器指代模式範圍的起始,則自減外部迭代器,並將內部迭代器設為前一個內層範圍的尾後迭代器。
  • 重複上述操作,直到內部迭代器不指代任何範圍的起始。
最後,如同透過 std::visit([](auto& it){ --it; }, inner_it_ ); 一樣自減內部迭代器。
5) 等價於 auto tmp = *this;
--*this;
return tmp;

[編輯] 返回值

1,4) *this
3,5) 更改前 *this 的副本。