Skip to content

Commit

Permalink
flat_mapのerase : flat_mapでは該当しない仕様を削除
Browse files Browse the repository at this point in the history
  • Loading branch information
faithandbrave committed Jun 24, 2023
1 parent 717658d commit 5674bf7
Showing 1 changed file with 3 additions and 26 deletions.
29 changes: 3 additions & 26 deletions reference/flat_map/flat_map/erase.md
Expand Up @@ -19,7 +19,7 @@ iterator erase(const_iterator first, const_iterator last); // (5) C++23
```
## 概要
単一要素またはイテレータ範囲`[first, last)`を `map` コンテナから削除する。
単一要素またはイテレータ範囲`[first, last)`を コンテナから削除する。
これは削除された要素の数だけコンテナの `size` を減らし、それぞれの要素のデストラクタを呼び出す。
Expand All @@ -43,35 +43,12 @@ iterator erase(const_iterator first, const_iterator last); // (5) C++23
## 計算量
- (1), (2) : 定数時間
- (3), (4) : コンテナの [`size()`](/reference/map/map/size.md) について対数時間
- (5) : コンテナの [`size()`](/reference/map/map/size.md) について対数時間、それに加えて `first` と `last` の間の距離に対する線形時間
- (3), (4) : コンテナの [`size()`](size.md) について対数時間
- (5) : コンテナの [`size()`](size.md) について対数時間、それに加えて `first` と `last` の間の距離に対する線形時間
## 備考
- (1), (2) : この関数に、範囲外のイテレータ (終端イテレータを含む) を指定した場合の動作は未定義
- 削除された要素を指すイテレータ、および、参照のみ無効になる。なお、規格書に明確な記載は無いが、削除された要素を指すポインタも無効になる
- ループ中で `map` の要素を削除するためには、C++03 までは以下のようなコードを書く必要があった。
```cpp
while (it != map_object.end()) {
if (条件) {
map_object.erase(it++);
}
else {
++it;
}
}
```

- これは、`erase` で指定したイテレータが、対象となる要素が削除されることによって無効になるため、後置インクリメント `it++` を使用することで要素が削除されるより先に削除対象の次の要素を指すようにするためである。
- このような書き方は C++11 以降でも依然として有効だが、`erase` が削除された次の要素を指すイテレータを返すようになったため、以下のようなコードを
```cpp
map_object.erase(it++);
```

- 以下のように書くこともできるようになった
```cpp
it = map_object.erase(it);
```
## 例
Expand Down

0 comments on commit 5674bf7

Please sign in to comment.