配列のベクトルは連続していますか?

Dec 29 2020

私が作成した場合

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

points2は、ヒープ内にdoubleを保持するメモリの連続したチャンクになることを私は知っています。ポイントはスタックに対してdouble *のメモリの連続したチャンクになると思いますか?しかし、それらの配列はスタック内で連続していますか?いくつかのポイントを表すために、doubleのペアを格納しているとしましょう。

points2は次のようにメモリにあります:[x0 y0 x1 y1 x2 y2 ...]ポイントはどうですか?この場合、ダブルのペアを保存するための最良の方法は何ですか?ヒントをありがとう。

回答

2 DanielLangr Dec 29 2020 at 04:16

配列のベクトルは連続していますか?

いいえそうではありません。std::array最後にパディングまたは追加のメンバーを含めることができます。詳細、例えばここ:

  • ネストされたstd :: arrayのデータは連続していることが保証されていますか?
  • std :: arrayのサイズは標準で定義されていますか

しかし、これが発生する可能性は非常に低いと思います。と比較することで2 * sizeof(double)、このような状況を簡単に確認できますsizeof(std::array<double, 2>)