ホームページ >バックエンド開発 >C++ >「push_back」と「emplace_back」: いつどちらを使用する必要がありますか?

「push_back」と「emplace_back」: いつどちらを使用する必要がありますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-29 17:22:10182ブラウズ

`push_back` vs. `emplace_back`: When Should You Use Which?

push_back と emplace_back

push_back と emplace_back の違いを理解するには、push_back のさまざまなオーバーロードの違いを理解することが重要です。

プッシュバックオーバーロード

push_back は、さまざまなデータ型と参照を処理する 3 つのオーバーロードを提供します。

  • push_back(const Type& _Val): 提供されたデータ型のコピーを受け取ります。
  • push_back(Type& _Val): 実際のデータへの参照を処理しますtype.
  • push_back(Type&& _Val): データ型への右辺値参照を受け入れます。

MSVC10 の emplace_back オーバーロード

Microsoft の場合Visual C 10 (MSVC10)、emplace_back には追加の機能があります。オーバーロード:

  • emplace_back(Type&&& _Val): このオーバーロードは本質的に冗長であり、push_back(Type&& _Val) オーバーロードと比較して独自の機能はありません。

C 0x の emplace_backオーバーロード

emplace_back の本物の C 0x 定義は大きく異なります:

  • emplace_back(Args&&&...): このオーバーロードにより、コンテナーは次を使用してコンテナー内でオブジェクトを直接構築できます。引数の可変長リスト。

の利点C 0x の emplace_back

emplace_back の C 0x バージョンには、いくつかの利点があります。

  • オブジェクトの直接構築: コンテナ内でオブジェクトを直接構築します。最初に一時オブジェクトを作成しなくても済みます。
  • 高速化パフォーマンス: このメソッドは、潜在的なコピーと移動をバイパスします。これは、push_back によって不要なコピーや移動が導入される可能性がある複雑なシナリオで特に有益です。

結論

C では、 emplace_back は Push_back 関数への強力な追加機能であり、引数の可変長リストを使用してコンテナ内のオブジェクトを簡単に構築できるようになります。 MSVC10 は emplace_back の非準拠実装を提供しますが、本物の C 0x 実装はパフォーマンスに大きなメリットをもたらし、コンテナ内でのオブジェクトのより効率的な構築を可能にします。

以上が「push_back」と「emplace_back」: いつどちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。