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

履歴 編集

function
<ranges>

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

    constexpr iterator& operator--() requires bidirectional_range<V>;      // (1)
    constexpr iterator operator--(int) requires bidirectional_range<V>;    // (2)

## 概要

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

## 効果

(1)は、

    do
      --current_;
    while (!invoke(*parent_->pred_, *current_));
    return *this;

と等しい。

(2)は、

    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::advance(i, 2);

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

### 出力

    4
    2
    0

## バージョン

### 言語

- 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