名前空間
変種
操作

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

From cppreference.com
 
 
 
 
(1)
void remove( const T& value );
(C++11以降)
(C++20まで)
size_type remove( const T& value );
(C++20以降)
(2)
template< class UnaryPredicate >
void remove_if( UnaryPredicate p );
(C++11以降)
(C++20まで)
template< class UnaryPredicate >
size_type remove_if( UnaryPredicate p );
(C++20以降)

指定された条件に一致するすべての要素を削除します。削除された要素へのイテレータと参照のみが無効になります。

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

目次

[編集] パラメータ

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

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

型要件
-
UnaryPredicatePredicate の要件を満たさなければなりません。

[編集] 戻り値

(なし)

(C++20まで)

削除された要素の数。

(C++20以降)

[編集] 計算量

Nstd::distance(begin(), end()) とすると、

1) N 回の operator== による比較。
2) 述語 pN 回の適用。

[編集] 注記

機能テストマクロ 規格 機能
__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

[編集] 関連項目

特定の基準を満たす要素を削除する
(関数テンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)