J'ai lu sur les différents conteneurs dans la bibliothèque standard C++, et je continue à entendre sur la façon dont le vecteur simple dans la pratique surpassera souvent la plupart des autres conteneurs lors de l'itération sur les éléments. On dit que cela est dû à la cohérence du cache (tous stockés dans la mémoire contiguë), au lieu de sauter d'un endroit à l'autre dans un arbre binaire ou une liste chaînée. Mais je pensais, si nous parlons d'un vecteur de pointeurs ou de références à des objets par opposition aux objets eux-mêmes, itérer sur le vecteur impliquera une déréférence à chaque itération, où l'objet est situé dans une zone séparée de la mémoire. Dans ce cas, je ne vois pas mieux que de sauter d'un lien vers un lien dans une liste ou un arbre. La façon dont je le vois est comme suit, et chacun fait à peu près la même chose pour autant que je puisse voir.Aucun avantage pour le vecteur mémoire contigu lorsque les éléments sont des pointeurs ou des références?
Si cela est vrai, alors je peux supposer que chaque fois que les gens prétendent que le vecteur est plus convivial qui cache c'est seulement le cas lorsque le stockage d'objets, et non des pointeurs ou des références à des objets? En outre, je ne suppose pas que si les pointeurs seraient à un type polymorphique ferait une différence entre les deux?
Même pour un 'vECTOR' de pointeurs, vous avez encore besoin de lire les valeurs de ces pointeurs vers déréférencer leur. Obtenir ces adresses sera toujours plus sensible au cache avec un 'vecteur' qu'avec une liste. –
Le vecteur est plus facile à mettre en cache qu'une liste si le vecteur et la liste stockent le même type de données, ce qui n'est pas le cas dans votre illustration. Vous devez comparer comme avec. –
"Dans ce cas, je ne vois pas mieux que de sauter d'un lien vers un lien dans une liste ou un arbre" car accéder aux pointeurs stockés dans une liste ou un arbre est toujours moins efficace que s'ils étaient stockés dans un vecteur . Le déréférencement des pointeurs vient s'ajouter à cela et peu importe d'où vient le pointeur – user463035818