Maison > développement back-end > C++ > Les éléments std::vector sont-ils garantis contigus en mémoire ?

Les éléments std::vector sont-ils garantis contigus en mémoire ?

DDD
Libérer: 2024-12-26 05:35:38
original
862 Les gens l'ont consulté

Are std::vector Elements Guaranteed to Be Contiguous in Memory?

Puis-je traiter les éléments std :: vector comme des tableaux contigus ?

La question se pose de savoir si les éléments d'un std :: vector sont garantis pour occuper des adresses mémoire contiguës, ce qui nous permet de traiter son pointeur vers le premier élément comme un C-array.

Contexte historique :

Dans la norme C 98, cette garantie était absente. Néanmoins, les exigences de la norme pour std::vector rendaient peu probable que les éléments soient non contigus.

Norme actuelle :

Cependant, cette question a été clarifiée dans le Norme C 0x (renommée plus tard C 11). Selon le TR qui a modifié la norme C 98 : « Les éléments d'un vecteur sont stockés de manière contiguë ». Cela signifie que pour un vecteur de type autre que bool, ce qui suit est vrai :

&v[n] == &v[0] + n
Copier après la connexion

où :

  • v est le vecteur
  • n est un index entre 0 et v.size() - 1

Exemple :

En conséquence, le code suivant est désormais valide et fonctionnera comme prévu :

std::vector<int> values;
// ... fill up values

if( !values.empty() )
{
    int *array = &values[0];
    for( int i = 0; i < values.size(); ++i )
    {
        int v = array[i];
        // do something with 'v'
    }
}
Copier après la connexion

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal