最終更新日時(UTC): 2025年07月08日 15時33分39秒
Akira Takahashi が更新

履歴 編集

function
<ranges>

# std::ranges::subrange::prev(C++20)

    [[nodiscard]]
    constexpr subrange
      prev(iter_difference_t<I> n = 1) const
        requires bidirectional_iterator<I>;   // (1) C++20
    constexpr subrange
      prev(iter_difference_t<I> n = 1) const
        requires bidirectional_iterator<I>;   // (1) C++26

## 概要

先頭を後退させた`subrange`を得る。

## 効果

    auto tmp = *this;
    tmp.advance(-n);
    return tmp;

## 例

    #include <ranges>
    #include <iostream>

    template<std::ranges::range R>
    void print(const R& r) {
      for (int x : r) {
        std::cout << x << ',';
      }
      std::cout << '\n';
    }

    int main()
    {
      constexpr int a[] = {1, 2, 3, 4, 5};
      std::ranges::subrange sub(a + 3, a + 4);

      print(sub);
      print(sub.prev());
      print(sub.prev().prev());
    }

### 出力

    4,
    3,4,
    2,3,4,

## バージョン

### 言語

- C++20

### 処理系

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

## 参照

- N4861 24 Ranges library
- C++20 ranges
- P2422R1 Remove `nodiscard` annotations from the standard library specification
  - C++26で`[[nodiscard]]`指定が削除された