Czy wektor tablic jest ciągły?

Dec 29 2020

Jeśli tworzę

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

Wiem, że points2 będzie ciągłym kawałkiem pamięci, zawierającym podwojenie w stercie. Myślę, że punkty będą ciągłym kawałkiem pamięci podwójnego * do stosu? Ale czy te tablice będą ciągłe w stosie? Powiedzmy, że przechowuję pary podwójnych, aby reprezentowały pewne punkty.

punkty2 są w pamięci w ten sposób: [x0 y0 x1 y1 x2 y2 ...] A co z punktami? Jaki jest najlepszy sposób na przechowywanie pary podwójnej w tym przypadku? Dzięki za jakąkolwiek wskazówkę.

Odpowiedzi

2 DanielLangr Dec 29 2020 at 04:16

Czy wektor tablic jest ciągły?

Nie, nie jest. std::arraymoże zawierać wyściółkę lub nawet dodatkowe elementy na końcu. Więcej szczegółów, np. Tutaj:

  • Czy dane w zagnieżdżonych tablicach std :: gwarantowane są ciągłe?
  • Czy rozmiar std :: array jest zdefiniowany przez standard

Ale uważam, że jest to bardzo mało prawdopodobne i możesz po prostu sprawdzić takie sytuacje, porównując 2 * sizeof(double)z sizeof(std::array<double, 2>).