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

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

Patricia Arquette
Patricia Arquetteoriginal
2024-12-19 12:48:10815parcourir

Are std::vector Elements Guaranteed to Be Contiguous?

Contiguïté des éléments std :: vector

La question se pose de savoir si les éléments std :: vector sont garantis contigus, permettant l'utilisation de le premier pointeur d'élément du vecteur sous forme de tableau C. Malgré l'absence de garantie explicite dans la norme C 98, il était difficile de répondre aux exigences std::vector sans contiguïté.

La norme C 0x a rectifié cette omission, comme indiqué dans n2798 :

"Un vecteur est un conteneur de séquence qui prend en charge... les éléments d'un vecteur sont stockés de manière contiguë, ce qui signifie que si v est un vecteur où T est un type autre que bool, alors il obéit à l'identité &v[n] == &v[0] n pour tout 0 <= n < v.size()."

Cela confirme que les éléments std::vector sont bien stockés de manière contiguë, permettant l'utilisation d'un pointeur vers le premier élément comme tableau C :

std::vector 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'
    }
}

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