Maison >développement back-end >C++ >Est-il sûr de supposer la contiguïté dans les vecteurs STL après le redimensionnement ?
En C, la bibliothèque de modèles standard (STL) fournit des structures de données puissantes, y compris la classe vectorielle. Bien que le redimensionnement d'un vecteur soit une opération courante, des inquiétudes surgissent quant à la sécurité de l'hypothèse de contiguïté mémoire.
La question posée est : "Si un vecteur STL a été redimensionné, pouvons-nous supposer que l'adressage de l'élément 0 donne accès à des éléments consécutifs ? emplacements mémoire contenant les éléments vectoriels restants?"
Selon la norme C 03 (23.2.4.1), la réponse est catégoriquement Oui. La norme stipule que les éléments vectoriels sont stockés de manière contiguë, garantissant que &v[n] == &v[0] n pour tout 0 ≤ n < v.size().
Cependant, il est crucial de noter que cette hypothèse n'est vraie que jusqu'à ce que le vecteur soit réaffecté. L'ajout d'éléments au vecteur peut déclencher une réallocation, invalidant tous les pointeurs ou itérateurs dérivés du bloc de mémoire d'origine.
Par conséquent, même s'il est prudent de supposer la contiguïté immédiatement après le redimensionnement, cela devient dangereux si les éléments sont ensuite ajoutés ou supprimés, provoquant potentiellement une réallocation 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!