Namespaces
Variants

std::inplace_vector<T,N>::erase

ja.cppreference.net より

 
 
 
 
constexpr iterator erase( const_iterator pos );
(1) (C++26以上)
constexpr iterator erase( const_iterator first, const_iterator last );
(2) (C++26以上)

指定された要素をコンテナから削除します。

1) 位置 pos。
2) 範囲 [first, last)。

イテレータ(end() イテレータ)および、削除位置以降の要素への参照は無効化されます。

イテレータ pos は有効かつ逆参照可能でなければなりません。したがって、end() イテレータ(有効ではあるが逆参照不可)の値として使用することはできません pos。

イテレータ first は、逆参照可能である必要はありません。もし first == last: 空の範囲を削除することは何も行いません。

パラメータ

pos - 削除する要素へのイテレータ
first, last - 削除する要素の範囲を定義するイテレータのペア range
型要件
-
T が MoveAssignable でない場合、動作は未定義です。

戻り値

削除された最後の要素に続くイテレータ。

1) pos が最後の要素を参照している場合、 end() イテレータが返されます。
2) 削除前に last == end ( ) であった場合、更新された end() イテレータが返されます。
もし [ 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, 26> v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    std::println("{}", v);

    v.erase(v.begin());
    std::println("{}", v);

    v.erase(std::next(v.begin(), 2), std::next(v.begin(), 5));
    std::println("{}", v);

    // Erase all even numbers
    for (auto 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]

関連項目

特定の条件を満たすすべての要素を削除する
(関数テンプレート)
内容をクリアする
(公開メンバ関数)