Skip to content

Latest commit

 

History

History
89 lines (67 loc) · 2.04 KB

op_increment.md

File metadata and controls

89 lines (67 loc) · 2.04 KB

operator++

  • iterator[meta header]
  • std[meta namespace]
  • common_iterator[meta class]
  • function[meta id-type]
  • cpp20[meta cpp]
common_iterator& operator++();    // (1)
decltype(auto) operator++(int);   // (2)

概要

イテレータをインクリメントする。

事前条件

holds_alternative<I>(v_) == true

効果

I, Sの値のどちらかをvariant<I, S>型のメンバ変数v_に保持しているとして

  • (1) : 以下と等価

    ++get<I>(v_);
    return *this;
  • (2) : 次のどちらかと等価

    • Iforward_iteratorのモデルである場合

      common_iterator tmp = *this;
      ++*this;
      return tmp;
    • それ以外の場合 : return get<I>(v_)++;

#include <iostream>
#include <iterator>
#include <ranges>

int main() {
  auto seq = std::views::iota(1) | std::views::take(5);

  // common_iteratorを通すことでイテレータ型と番兵型を合わせる
  using CI = std::common_iterator<std::ranges::iterator_t<decltype(seq)>, std::ranges::sentinel_t<decltype(seq)>>;

  CI ci{std::ranges::begin(seq)};
  
  std::cout << *ci << std::endl;
  
  ++ci;
  
  std::cout << *ci << std::endl;

  ci++;

  std::cout << *ci << std::endl;
}
  • ++ci[color ff0000]
  • views::iota[link /reference/ranges/iota_view.md]
  • views::take[link /reference/ranges/take_view.md]
  • iterator_t[link /reference/ranges/iterator_t.md]
  • sentinel_t[link /reference/ranges/sentinel_t.md]
  • ranges::begin[link /reference/ranges/begin.md]

出力

1
2
3

バージョン

言語

  • C++20

処理系

参照