Un vettore di array è contiguo?
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
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>).