void clear() noexcept;
概要
コンテナ内のすべての要素を削除する。
要件
なし。
効果
コンテナ内のすべての要素を削除する。
事後条件
empty() == true
戻り値
なし。
例外
投げない。
計算量
本関数呼び出し前のコンテナの要素数(size()
)に比例
計算量に関する備考
多くの実装(GCC libstdc++, LLVM libc++ など)は
- 全ての要素を走査して各要素を破棄
- 全てのバケットを走査して各バケットの状態をリセット
という手順を取るため、実際の実行時間はバケット数 bucket_count()
について線形となる (size() <= bucket_count() * max_load_factor()
= O(bucket_count()
) であることに注意)。
規格の計算量の要件は要素数 size()
に線形となっているが、規格がコンテナに対して定義する計算量は「コンテナに格納している要素に対する操作の数の計算量」であるためバケットの走査などを考慮していない。
備考
clear()
がバケット数(bucket_count()
)を縮小することを規格は要求していない。 実装によってはclear()
後もバケット配列が維持され、動的メモリが残る場合がある。- バケット数を初期状態まで縮小させたいときには
clear()
の代わりに以下のように操作する
um = std::unordered_map<std::string, int>();
例
#include <iostream>
#include <unordered_map>
int main()
{
std::unordered_map<std::string, int> um{ {"1st", 1}, {"2nd", 2}, {"3rd", 3}, {"4th", 4}, {"5th", 5}, };
std::cout << std::boolalpha;
std::cout << um.empty() << std::endl;
um.clear();
std::cout << um.empty() << std::endl;
}
出力
false
true
バージョン
言語
- C++11
処理系
- Clang: 3.1 ✅
- GCC: 4.7.0 ✅
- ICC: ?
- Visual C++: ?
関連項目
名前 | 説明 |
---|---|
empty |
コンテナが空かどうかを判定 |
emplace |
コンテナ内への要素の直接構築 |
emplace_hint |
挿入位置のヒントを使用したコンテナ内への要素の直接構築 |
insert |
要素の追加 |
erase |
要素の削除 |
swap |
内容の交換 |