2017-04-12 5 views
0

簡単な質問:一定の時間内に現在のイテレータの位置を削除できるSTLコンテナはありますか?
ありがとうございます!stlコンテナの要素を一定時間削除する

+0

'std :: list' http://en.cppreference.com/w/cpp/container/list/erase – Raxvan

+3

注:まだ他の操作をサポートしている場合は、「ベクトル」を考慮してください。ダブルリンクされたリストには多くのオーバーヘッドがあります –

+4

ソートされていないコンテナは、任意の位置の要素をコンテナの最後(または先頭)にある要素と入れ替えて、最後/最初の要素を削除できます。これにより、問題のコンテナのvalue_typeをスワッピングすることが一定の時間内に行われることを条件として、一定時間内に削除が可能になる。このテクニックはCppConの[this talk](https://youtu.be/oBbGC-sUYVA?t=155)で説明されています。2016 – Pandatyr

答えて

2

std::listは複雑でeraseあります

複雑

1)定数です。

2)最初と最後の間の線形の線形です。

ケース2では、ある範囲の要素に対して消去を使用します。ドキュメントから

std::list<T>::eraseは次のようになります。あなたがの秩序を維持する必要がない場合

2

少なくともstd :: listは一定の時間内に要素を消去することができます。

1

(それが唯一のerase_afterを持っているので、まったく同じではない)

//(1) 
iterator erase(iterator pos); 
iterator erase(const_iterator pos); 
//(2) 
iterator erase(iterator first, iterator last); 
iterator erase(const_iterator first, const_iterator last); 

別の一つはstd::forward_listですstd::vectorを "スワップアンドポップ"と使用できる要素 - 削除したい要素をベクトルの最後の要素と入れ替えてから、最後の新しい要素をポップします。

関連する問題