std::inplace_vector<T,N>:: erase
|
constexpr
iterator erase
(
const_iterator pos
)
;
|
(1) | (C++26以降) |
|
constexpr
iterator erase
(
const_iterator first, const_iterator last
)
;
|
(2) | (C++26以降) |
コンテナから指定された要素を削除します。
[
first
,
last
)
。
イテレータ(
end()
イテレータを含む)および消去ポイント以降の要素への参照は無効化されます。
イテレータ pos は有効かつデリファレンス可能でなければなりません。したがって、 end() イテレータ(有効ではありますが、デリファレンス可能ではありません)は pos の値として使用することはできません。
イテレータ first は、もし first == last の場合、デリファレンス可能である必要はありません:空の範囲の削除は何も行わない操作です。
目次 |
パラメータ
| pos | - | 削除する要素へのイテレータ |
| first, last | - | 削除する要素の範囲を定義するイテレータのペア range |
| 型要件 | ||
-
T
が
MoveAssignable
でない場合、動作は未定義です。
|
||
戻り値
削除された最後の要素に続くイテレータ。
[
first
,
last
)
が空の範囲であれば、
last
が返されます。
例外
T
の代入演算子によって例外がスローされない限り、例外をスローしません。
計算量
Linear:
T
のデストラクタの呼び出し回数は削除された要素数と同じであり、
T
の代入演算子は削除された要素以降のベクター内の要素数に等しい回数呼び出されます。
注記
コンテナ要素を述語に基づいて削除する必要がある場合、コンテナを反復処理して単項
erase
を呼び出すのではなく、残りの(削除されない)要素の移動回数を最小限に抑えるために、イテレータ範囲オーバーロードが一般的に
std::remove()/std::remove_if()
と共に使用されます — これがerase-removeイディオムです。
std::erase_if()
はerase-removeイディオムを置き換えます。
例
#include <inplace_vector> #include <print> int main() { std::inplace_vector<int, 10> v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; std::println("{}", v); v.erase(v.begin()); std::println("{}", v); v.erase(v.begin() + 2, v.begin() + 5); std::println("{}", v); // すべての偶数を削除 for (std::inplace_vector<int, 10>::iterator it{v.begin()}; it != v.end();) if (*it % 2 == 0) it = v.erase(it); else ++it; std::println("{}", v); }
出力:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 6, 7, 8, 9] [1, 7, 9]
関連項目
|
特定の条件を満たすすべての要素を削除する
(関数テンプレート) |
|
|
内容をクリアする
(公開メンバ関数) |