82

と関数vectorの違いを知りたい。push_backinsert

構造的な違いはありますか?

本当に大きなパフォーマンスの違いはありますか?

4

4 に答える 4

97

最大の違いはそれらの機能です。push_back常に新しい要素をの最後に配置し、新しい要素の位置vectorinsert選択できるようにします。これはパフォーマンスに影響します。vector割り当てられたメモリが少なすぎるため、要素の長さを増やす必要がある場合にのみ、要素がメモリ内で移動されます。一方insert、新しい要素の選択された位置の後にすべての要素を強制的に移動します。あなたは単にそれのための場所を作る必要があります。insertこれが、多くの場合、より効率が悪い可能性がある理由ですpush_back

于 2012-11-10T17:41:42.273 に答える
32

関数にはさまざまな目的があります。vector::insertの指定した位置にオブジェクトを挿入できますが、vectorオブジェクトvector::push_backを最後に貼り付けるだけです。次の例を参照してください。

using namespace std;
vector<int> v = {1, 3, 4};
v.insert(next(begin(v)), 2);
v.push_back(5);
// v now contains {1, 2, 3, 4, 5}

を使用insertして、と同じジョブを実行push_backできますv.insert(v.end(), value)

于 2012-11-10T17:41:52.560 に答える