2016-01-25 24 views
5

「通常」の方法は、このように書きます:のstd ::ベクトル::対消去「スワップとポップ」

vec.erase(vec.begin() + index); 

しかし、理論的にはそれだけでこれを行うために高速です。

if (vec.size() >= 2) 
{ 
    std::swap(vec.begin() + index, vec.end() - 1); 
    vec.pop_back(); 
} 
else 
{ 
    vec.clear(); 
} 

後者を使用しない理由はありますか?

+2

注文を保存する必要がある場合は、通常の方法が必要です。 – zch

+1

削除が速くなる必要がある場合は、常にリンクリストの使用を検討できます。 – CompuChip

+3

@CompuChipこれは2番目の例よりも遅くなりますが、リンクされたリストは基本的にはデフォルトでは遅くなります。 – Veedrac

答えて

10

2番目のケースでは、ベクトルの要素の順序が保持されません。これがソートされたベクトルであるか、または順序が重要である場合、最初のケースでオーダーをそのまま残す2番目のケースでそれを壊しただけです。

+1

そして、その順序が重要でないならば、ベクトルはおそらく仕事が何であれ、正しい道具ではないでしょう。ベクトルが適切なツールであるということは重要ではありません:D –

関連する問題