Un vettore di array è contiguo?

Dec 29 2020

Se creo

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

So che points2 sarà un pezzo contiguo di memoria che tiene i doppi nell'heap. Penso che i punti saranno un pezzo di memoria contiguo del doppio * allo stack? Ma questi array saranno contigui nello stack? Diciamo che sto memorizzando coppie di doppi per rappresentare alcuni punti.

points2 è in memoria così: [x0 y0 x1 y1 x2 y2 ...] E i punti? Qual è il modo migliore per conservare una coppia di doppi in questo caso? Grazie per qualsiasi suggerimento.

Risposte

2 DanielLangr Dec 29 2020 at 04:16

Un vettore di array è contiguo?

No non lo è. std::arraypuò contenere imbottitura o anche membri aggiuntivi alla fine. Maggiori dettagli, ad esempio, qui:

  • È garantito che i dati negli std :: array annidati siano contigui?
  • È la dimensione di std :: array definita dallo standard

Ma credo che sia molto improbabile che accada e puoi semplicemente controllare tali situazioni confrontandole 2 * sizeof(double)con sizeof(std::array<double, 2>).