Contiguïté de la mémoire des éléments std::Vector
Les développeurs concernés soulèvent souvent la question de savoir si les éléments d'un std::vector sont garantis être contigu. Cette propriété détermine s'il est permis de traiter le pointeur vers le premier élément comme un tableau de style C.
Dispositions standard
Initialement, la norme C 98 a négligé de spécifier cet aspect. Cependant, des rapports techniques (TR) ultérieurs ont rectifié cet oubli et la prochaine norme C 0x l'intégrera en tant qu'exigence explicite.
Spécifications TR
N2798, un projet de C 0x, postule :
"Un vecteur est un conteneur de séquence qui prend en charge les itérateurs à accès aléatoire... 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 <
Exemple
Sur la base de cette spécification, considérons le code suivant extrait :
std::vectorvalues; // ... 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' } } Le standard C garantit que ce code fonctionnera comme prévu en permettant un accès direct en mémoire aux éléments du vecteur.
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!