void unique(); // (1) C++98
size_type unique(); // (1) C++20
constexpr size_type unique(); // (1) C++26
template <class BinaryPredicate>
void unique(BinaryPredicate pred); // (2) C++98
template <class BinaryPredicate>
size_type unique(BinaryPredicate pred); // (2) C++20
template <class BinaryPredicate>
constexpr size_type unique(BinaryPredicate pred); // (2) C++26
概要
コンテナから重複した要素を削除する
要件
コンテナがソート済みであること。ソート済みでない場合、この関数の動作は未規定。
事前条件
- (2) :
- C++23 :
predは同値関係であること。
- C++23 :
効果
連続する等価な要素のグループごとに、先頭の要素以外を削除する。すなわち、イテレータ範囲[first + 1, last)の全てのイテレータiについて、オーバーロードごとに、以下の条件がtrueとなる要素を削除する。
- (1) :
*i == *(i - 1) - (2) :
pred(*i, *(i - 1))
削除された要素に対するイテレータおよび参照は無効となる。
戻り値
- (1), (2) :
- C++98 : なし
- C++20 : 削除された要素数を返す
例外
計算量
コンテナが空でない場合、ちょうど(last - first) - 1回の等値比較、もしくは述語の適用を行う。空の場合、等値比較・述語の適用は行わない。
例
出力
1
3
4