Un vecteur de tableaux est-il contigu?

Dec 29 2020

Si je crée

std::vector<std::array<double, 2>> points;
std::vector<double> points2;

Je sais que points2 sera un morceau contigu de mémoire contenant des doubles dans le tas. Je pense que les points seront un morceau contigu de mémoire de double * à la pile? Mais ces tableaux seront-ils contigus dans la pile? Disons que je stocke des paires de doubles pour représenter certains points.

points2 est en mémoire comme ceci: [x0 y0 x1 y1 x2 y2 ...] Et les points? Quelle est la meilleure façon de stocker une paire de doubles dans ce cas? Merci pour tout conseil.

Réponses

2 DanielLangr Dec 29 2020 at 04:16

Un vecteur de tableaux est-il contigu?

Non, ça ne l'est pas. std::arraypeut contenir un rembourrage ou même des membres supplémentaires à la fin. Plus de détails, par exemple, ici:

  • Les données des tableaux std :: imbriqués sont-elles garanties d'être contiguës?
  • Est la taille de std :: array définie par standard

Mais je pense que cela est très peu probable et vous pouvez simplement vérifier de telles situations en comparant 2 * sizeof(double)avec sizeof(std::array<double, 2>).