Maison > développement back-end > C++ > Quand `std::vector` surpasse-t-il les tableaux bruts en C ?

Quand `std::vector` surpasse-t-il les tableaux bruts en C ?

Mary-Kate Olsen
Libérer: 2024-12-20 10:38:12
original
685 Les gens l'ont consulté

When Does `std::vector` Outperform Raw Arrays in C  ?

Vecteur vs tableaux : un dilemme de performances

En C, l'utilisation de tableaux a été découragée au profit des std::vectors. Cependant, l'ampleur des différences de performances a souvent été remise en question.

Évitement des tableaux C

Les directives actuelles suggèrent d'éviter les tableaux C nouvellement alloués, car ils nécessitent un suivi manuel et effacement. De plus, l'utilisation de tableaux sur la pile est déconseillée en raison du manque de vérification de plage et de la perte d'informations sur la taille lors de la conversion du pointeur. Dans de tels cas, std::array est recommandé, fournissant des fonctions de taille et des itérateurs.

std::Vector vs. Native Arrays

Les résultats empiriques révèlent que l'indexation de base, Les opérations de déréférencement et d'incrémentation sur les vecteurs fonctionnent de manière identique à leurs homologues de tableau/pointeur correspondants. L'analyse du code assembleur confirme cette équivalence (voir l'extrait de code ci-dessous).

int pointer_index(S &s) { return s.p[3]; } // Analogous to vector indexing

int vector_index(S &s) { return s.v[3]; } // Same assembly code
Copier après la connexion
int pointer_deref(S &s) { return *s.p; } // Analogous to iterator dereferencing

int iterator_deref(S &s) { return *s.i; } // Identical assembly code
Copier après la connexion
void pointer_increment(S &s) { ++s.p; } // Analogous to iterator increment

void iterator_increment(S &s) { ++s.i; } // Same assembly code
Copier après la connexion

Exception : avantage en termes de performances des tableaux nouvellement alloués

One L'exception à l'équivalence de performances concerne les tableaux nouvellement alloués contenant des objets non-classes ou des classes sans constructeurs définis par l'utilisateur. Dans ce cas, les tableaux nouvellement alloués peuvent offrir un avantage par rapport aux std :: vectors, car std :: vectors initialisent les éléments aux valeurs par défaut (par exemple, 0 pour int) lors de la construction.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal