emplace を使用した単一の挿入とベクター内の挿入を使用した複数の挿入とは別に、それらの実装に他に違いはありますか?
どちらの場合も、要素を挿入すると他のすべての要素がシフトされます。
std::vector::insert
コピーコンストラクターまたは移動コンストラクターを呼び出して、要素をコンテナーにコピーまたは移動します。
一方、
Instd::vector::emplace
要素はin-place で構築されます。つまり、コピーまたは移動操作は実行されません。
後者は C++11 以降に導入されたものであり、クラスのコピーが重要な操作である場合は、その使用が望ましいです。
主な違いはinsert
、コンテナーの型と同じ型のオブジェクトを受け取り、その引数をコンテナーにコピーすることです。emplace
多かれ少なかれ任意の引数リストを取り、それらの引数からコンテナー内のオブジェクトを構築します。