最終更新日時(UTC): 2026年02月17日 14時22分33秒
Akira Takahashi が更新

履歴 編集

function template
<forward_list>

# std::erase (非メンバ関数)(C++20)

    namespace std {
      template <class T, class Allocator, class U>
      typename forward_list<T, Allocator>::size_type
        erase(forward_list<T, Allocator>& c, const U& value); // (1) C++20
      template <class T, class Allocator, class U = T>
      constexpr typename forward_list<T, Allocator>::size_type
        erase(forward_list<T, Allocator>& c, const U& value); // (1) C++26
    }

## 概要

指定した値をもつ要素とその分の領域を、コンテナから削除する。

## 効果

以下と等価：

    erase_if(c, [&](auto& elem) { return elem == value; });

## 戻り値

削除した要素数を返す。

## 備考

- (1) :
  - C++26 : 引数として波カッコ初期化`{}`を受け付ける

        std::forward_list<std::vector<int>> ls;
        erase(ls, {}); // 空の要素を削除
        erase(ls, {1, 2, 3}); // 値{1, 2, 3}をもつ要素を削除

## 例

### 基本的な使い方

    #include <iostream>
    #include <forward_list>

    int main()
    {
      std::forward_list<int> ls = {3, 1, 4, 1, 5};

      // コンテナlsから、値1をもつ要素をすべて削除する
      std::erase(ls, 1);

      for (int x : ls) {
        std::cout << x << std::endl;
      }
    }

#### 出力

    3
    4
    5

### 波カッコ初期化を入力として使用する (C++26)

    #include <print>
    #include <forward_list>
    #include <vector>

    int main() {
      std::forward_list<std::vector<int>> ls = {
        {1, 2, 3},
        {4, 5, 6},
        {},
        {7, 8}
      };

      std::erase(ls, {}); // 空の要素を削除
      std::erase(ls, {1, 2, 3}); // 値{1, 2, 3}をもつ要素を削除

      std::println("{}", ls);
    }

#### 出力

    [[4, 5, 6], [7, 8]]

## バージョン

### 言語

- C++20

### 処理系

- Clang: 8.0 ✅
- GCC: 9.1 ✅
- Visual C++: ??

## 参照

- P1209R0 Adopt consistent container erasure from Library Fundamentals 2
- R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`
- P2248R8 Enabling list-initialization for algorithms
  - C++26で波カッコ初期化 (リスト初期化) に対応した
- P3372R3 constexpr containers and adaptors