¿Es un vector de matrices contiguo?

Dec 29 2020

Si creo

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

Sé que points2 será un trozo contiguo de memoria que contiene dobles en el montón. Creo que los puntos serán una porción contigua de memoria de doble * a la pila. Pero, ¿esas matrices serán contiguas en la pila? Digamos que estoy almacenando pares de dobles para representar algunos puntos.

points2 está en la memoria así: [x0 y0 x1 y1 x2 y2 ...] ¿Qué pasa con los puntos? ¿Cuál es la mejor manera de almacenar pares de dobles en este caso? Gracias por cualquier consejo.

Respuestas

2 DanielLangr Dec 29 2020 at 04:16

¿Es un vector de matrices contiguo?

No, no es. std::arraypuede contener relleno o incluso miembros adicionales al final. Más detalles, por ejemplo, aquí:

  • ¿Se garantiza que los datos de las matrices std :: anidadas sean contiguas?
  • ¿Es el tamaño de std :: array definido por estándar?

Pero creo que es muy poco probable que esto suceda y simplemente puede verificar tales situaciones comparando 2 * sizeof(double)con sizeof(std::array<double, 2>).