最終更新日時(UTC): 2025年09月24日 10時08分35秒
Raclamusi が更新

履歴 編集

function
<ranges>

# std::ranges::filter_view::iterator::operator++(C++20)

    constexpr iterator& operator++();                             // (1)
    constexpr void operator++(int);                               // (2)
    constexpr iterator operator++(int) requires forward_range<V>; // (3)

## 概要

イテレータを1つ進める。

## 効果

(1)は、

    current_ = ranges::find_if(
      std::move(++current_),
      ranges::end(parent_->base_),
      ref(*parent_->pred_));
    return *this;

と等しい。

(2)は、`++*this` と等しい。

(3)は、

    auto tmp = *this;
    ++*this;
    return tmp;

と等しい。

## 例

    #include <ranges>
    #include <vector>
    #include <iostream>

    int main() {
      using std::ranges::filter_view;
      using std::ranges::iterator_t;

      std::vector<int> vec = {0, 1, 2, 3, 4, 5};

      filter_view fv{vec, [](int x){ return x % 2 == 0; }};

      iterator_t<decltype(fv)> i(fv, vec.begin());

      std::cout << *i << '\n';
      i++;
      std::cout << *i << '\n';
      i++;
      std::cout << *i << '\n';
    }

### 出力

    0
    2
    4

## バージョン

### 言語

- C++20

### 処理系

- Clang: 13.0.0 ✅
- GCC: 10.1.0 ✅
- ICC: ?
- Visual C++: 2019 Update 10 ✅

## 参照

- N4861 24.7.4 Filter view
- N4950 26.7.8 Filter view