5

クラスがあれば

class foo {
 public:
  foo() { // spend some time and do something. }
 private:
   // some data here
}

これで foo のベクトルができたので、このベクトルを別のベクトルに入れたい

vector<foo> input; // assume it has 5 elements
vector<foo> output;

これらの 2 つのラインでパフォーマンスに違いはありますか?

output.push_back(input[0])
output.emplace_back(input[0])
4

1 に答える 1

12

これらの2つのラインでパフォーマンスの違いはありますか?

いいえ、どちらもコピーコンストラクタを使用して新しい要素を初期化します。

emplace_back1つより多い(または少ない)引数で構築する場合、潜在的に利益をもたらす可能性があります。

output.push_back(foo{bar, wibble}); // Constructs and moves a temporary
output.emplace_back(bar, wibble);   // Initialises directly

の真の利点はemplace、パフォーマンスではなく、コピーできない(場合によっては移動できない)要素をコンテナー内に作成できるようにすることです。

于 2012-12-14T17:20:01.350 に答える