Maison > développement back-end > C++ > Les éléments vectoriels STL restent-ils consécutifs en mémoire après le redimensionnement ?

Les éléments vectoriels STL restent-ils consécutifs en mémoire après le redimensionnement ?

Susan Sarandon
Libérer: 2024-11-16 07:26:03
original
595 Les gens l'ont consulté

Do STL Vector Elements Remain Consecutive in Memory After Resizing?

Contiguïté de stockage des éléments vectoriels STL

Lorsque vous travaillez avec des vecteurs STL, il est essentiel de comprendre la disposition de la mémoire de leurs éléments. Une question courante se pose : si un vecteur a été redimensionné, peut-on supposer en toute sécurité que ses éléments sont stockés de manière contiguë en mémoire ?

Analyse

La norme C 03 (23.2 .4.1) fournit la réponse :

The elements of a vector are stored contiguously, meaning that if v is a vector where T is some
type other than bool, then it obeys the identity &amp;v[n] == &amp;v[0] + n for all 0 <= n < v.size().
Copier après la connexion

En termes plus simples, cela signifie que l'adresse du premier élément (&v[0]) d'un vecteur est égal à l'adresse de son n-ième élément (&v[n]) plus le décalage de n. Ceci s'applique aux vecteurs contenant des types de données autres que les booléens.

Exemple

Considérons le code suivant :

vector<char> vc(100);
// do some stuff with vc
vc.resize(200);
char* p = &vc[0];
// do stuff with *p
Copier après la connexion

Selon la norme, nous peut supposer en toute sécurité qu'après avoir redimensionné le vecteur, l'adresse stockée dans p fournira un accès contigu aux 200 éléments du vecteur. En effet, les éléments du vecteur sont garantis d'être stockés les uns après les autres en mémoire, permettant un parcours et un accès efficaces.

Attention

Cependant, c'est important à noter que lors de l'ajout d'éléments à un vecteur, son stockage peut être réaffecté. Cela peut invalider tous les pointeurs ou itérateurs existants vers les éléments vectoriels, il est donc essentiel d'en tenir compte lorsque vous travaillez avec des vecteurs.

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