10

emplace を使用した単一の挿入とベクター内の挿入を使用した複数の挿入とは別に、それらの実装に他に違いはありますか?

どちらの場合も、要素を挿入すると他のすべての要素がシフトされます。

4

2 に答える 2

16

std::vector::insert コピーコンストラクターまたは移動コンストラクターを呼び出して、要素をコンテナーにコピーまたは移動します
一方、
Instd::vector::emplace要素はin-place で構築されます。つまり、コピーまたは移動操作は実行されません。

後者は C++11 以降に導入されたものであり、クラスのコピーが重要な操作である場合は、その使用が望ましいです。

于 2013-03-27T12:56:32.207 に答える
2

主な違いはinsert、コンテナーの型と同じ型のオブジェクトを受け取り、その引数をコンテナーにコピーすることです。emplace多かれ少なかれ任意の引数リストを取り、それらの引数からコンテナー内のオブジェクトを構築します。

于 2013-03-27T12:54:42.483 に答える