Les éléments std::vector sont-ils garantis d'être contigus ?
Bien que la norme C 98 ne garantisse pas explicitement les éléments contigus au sein d'un std : :vector, les exigences de std::vector rendaient très improbable que les éléments ne soient pas contigus. Cependant, cela a ensuite été clarifié en tant qu'exigence dans le projet n2798 de la norme C 0x.
La prochaine norme C 0x comprend l'exigence suivante :
A vector is a sequence container that supports random access iterators. In addition, it supports (amortized) constant time insert and erase operations at the end; insert and erase in the middle take linear time. Storage management is handled automatically, though hints can be given to improve efficiency. 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 &v[n] == &v[0] + n for all 0 <= n < v.size().
Cela signifie que vous pouvez en toute sécurité utilisez le pointeur vers le premier élément d'un std::vector comme tableau C, comme dans l'exemple suivant :
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' } }
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!