最終更新日時(UTC):
が更新

履歴 編集

function
<unordered_set>

std::unordered_set::clear(C++11)

void clear() noexcept;

概要

コンテナ内のすべての要素を削除する。

要件

なし。

効果

コンテナ内のすべての要素を削除する。

事後条件

empty() == true

戻り値

なし。

例外

投げない。

計算量

本関数呼び出し前のコンテナの要素数(size())に比例

計算量に関する備考

多くの実装(GCC libstdc++, LLVM libc++ など)は

  1. 全ての要素を走査して各要素を破棄
  2. 全てのバケットを走査して各バケットの状態をリセット

という手順を取るため、実際の実行時間はバケット数 bucket_count() について線形となる (size() <= bucket_count() * max_load_factor() = O(bucket_count()) であることに注意)。 規格の計算量の要件は要素数 size() に線形となっているが、規格がコンテナに対して定義する計算量は「コンテナに格納している要素に対する操作の数の計算量」であるためバケットの走査などを考慮していない。

備考

  • clear() がバケット数(bucket_count())を縮小することを規格は要求していない。 実装によっては clear() 後もバケット配列が維持され、動的メモリが残る場合がある。
  • バケット数を初期状態まで縮小させたいときには clear() の代わりに以下のように操作する
    us = std::unordered_set<int>();
    

#include <iostream>
#include <unordered_set>

int main()
{
  std::unordered_set<int> us{ 1, 2, 3, 4, 5, };

  std::cout << std::boolalpha;
  std::cout << us.empty() << std::endl;
  us.clear();
  std::cout << us.empty() << std::endl;
}

出力

false
true

バージョン

言語

  • C++11

処理系

関連項目

名前 説明
empty コンテナが空かどうかを判定
emplace コンテナ内への要素の直接構築
emplace_hint 挿入位置のヒントを使用したコンテナ内への要素の直接構築
insert 要素の追加
erase 要素の削除
swap 内容の交換