Смежен ли вектор массивов?

Dec 29 2020

Если я создам

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

Я знаю, что points2 будет непрерывным фрагментом памяти, содержащим двойные файлы в куче. Думаю, точки будут непрерывным куском памяти от double * до стека? Но будет ли этот массив непрерывным в стеке? Скажем, я храню пары двойников для представления некоторых точек.

Points2 находится в памяти следующим образом: [x0 y0 x1 y1 x2 y2 ...] А как насчет точек? Как лучше всего хранить пару дублей в этом случае? Спасибо за любой совет.

Ответы

2 DanielLangr Dec 29 2020 at 04:16

Смежен ли вектор массивов?

Нет. std::arrayможет содержать заполнение или даже дополнительные элементы в конце. Подробнее, например, здесь:

  • Гарантируется ли непрерывность данных во вложенных массивах std ::?
  • Размер std :: array определен стандартом

Но я считаю, что это очень маловероятно, и вы можете просто проверить такие ситуации, сравнив 2 * sizeof(double)с sizeof(std::array<double, 2>).