Maison >développement back-end >C++ >`push_back` vs `emplace_back` : quand devez-vous utiliser lequel ?

`push_back` vs `emplace_back` : quand devez-vous utiliser lequel ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-29 17:22:10202parcourir

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

push_back vs emplace_back

Pour comprendre les différences entre push_back et emplace_back, il est crucial de saisir la distinction entre les différentes surcharges pour push_back.

push_back Surcharges

push_back propose trois surcharges gérant différents types de données et références :

  • push_back(const Type& _Val) : reçoit une copie du type de données fourni.
  • push_back(Type& _Val) : gère une référence aux données réelles type.
  • push_back(Type&& _Val) : accepte une référence rvalue au type de données.

emplace_back Surcharge dans MSVC10

Dans Microsoft Visual C 10 (MSVC10), emplace_back a un supplément surcharge :

  • emplace_back(Type&&& _Val) : cette surcharge est essentiellement redondante et n'a pas de fonctionnalité unique par rapport à la surcharge push_back(Type&& _Val).

C Surcharge emplace_back de 0x

La véritable définition C 0x de emplace_back diffère considérablement :

  • emplace_back(Args&&&...) : Cette surcharge permet au conteneur de construire un objet directement en lui-même à l'aide d'une liste variadique d'arguments.

Avantages de emplace_back en C 0x

La version C 0x d'emplace_back propose plusieurs avantages :

  • Construction directe d'objet : Il construit directement un objet dans le conteneur sans créer d'objet temporaire au préalable.
  • Performances plus rapides : Cette méthode contourne les copies et déplacements potentiels, ce qui est particulièrement bénéfique dans les scénarios complexes où push_back pourrait introduire des copies inutiles ou se déplace.

Conclusion

En C , emplace_back est un ajout puissant à la fonction push_back qui permet une construction simple d'objets dans un conteneur à l'aide d'une liste variadique de arguments. Alors que MSVC10 offre une implémentation non conforme d'emplace_back, la véritable implémentation C 0x offre des avantages significatifs en termes de performances et permet une construction plus efficace d'objets dans des conteneurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn