Namespaces
Variants

std::forward_list<T,Allocator>:: remove, remove_if

From cppreference.net

(1)
void remove ( const T & value ) ;
(C++11以降)
(C++20まで)
size_type remove ( const T & value ) ;
(C++20以降)
(C++26以降 constexpr)
(2)
template < class UnaryPred >
void remove_if ( UnaryPred p ) ;
(C++11以降)
(C++20まで)
template < class UnaryPred >
size_type remove_if ( UnaryPred p ) ;
(C++20以降)
(C++26以降 constexpr)

特定の条件を満たす全ての要素を削除します。

1) value に等しいすべての要素を削除します( operator == を使用)。
2) 述語 p true を返す全ての要素を削除します。

削除された要素に対するイテレータと参照のみを無効化します。

目次

パラメータ

value - 削除する要素の値
p - 要素を削除すべき場合に​ true を返す単項述語。

p ( v ) は、型(const修飾されている可能性もある) T の引数 v に対して、 値カテゴリ に関わらず bool に変換可能でなければならず、 v を変更してはならない。したがって、 T & のパラメータ型は許可されない 。また、 T も、 T においてムーブがコピーと等価である場合を除き許可されない (C++11以降) 。 ​

型要件
-
UnaryPred Predicate の要件を満たさなければならない。

戻り値

(なし)

(until C++20)

削除された要素の数。

(since C++20)

計算量

与えられた N std:: distance ( begin ( ) , end ( ) ) として:

1) 厳密に N 回の比較を operator == を使用して行う。
2) 厳密に N 回の述語 p の適用。

注記

機能テスト マクロ 標準 機能
__cpp_lib_list_remove_return_type 201806L (C++20) 戻り値の型を変更

#include <forward_list>
#include <iostream>
int main()
{
    std::forward_list<int> l = {1, 100, 2, 3, 10, 1, 11, -1, 12};
    auto count1 = l.remove(1);
    std::cout << count1 << " elements equal to 1 were removed\n";
    auto count2 = l.remove_if([](int n){ return n > 10; });
    std::cout << count2 << " elements greater than 10 were removed\n";
    std::cout << "Finally, the list contains: ";
    for (int n : l)
        std::cout << n << ' ';
    std::cout << '\n';
}

出力:

2 elements equal to 1 were removed
3 elements greater than 10 were removed
Finally, the list contains: 2 3 10 -1

関連項目

特定の条件を満たす要素を削除する
(関数テンプレート)