C++ 11 ではstd::array
、配列よりも悪くない連続したストレージとパフォーマンスを持つように定義されていますが、標準のさまざまな要件が std::array が通常と同じサイズとメモリ レイアウトを持っていることを意味するかどうかは判断できません。配列。それは信頼できますか、sizeof(std::array<int,N>) == sizeof(int)*N
それとも実装固有ですか?
特に、これはあなたが期待するように動作することが保証されています:
std::vector< std::array<int, N> > x(M);
typedef (*ArrayPointer)[N];
ArrayPointer y = (ArrayPointer) &x[0][0];
// use y like normal multidimensional array
私が試した2つのコンパイラ(GNUとIntel)で動作します。さらに、私が見つけることができるすべてのサードパーティのドキュメント (このように) は、std::array はプレーン配列と同じくらいメモリ効率が高く、連続した要件と組み合わせると、同一のメモリ レイアウトが必要であることを意味すると述べています。ただし、この要件は標準では見つかりません。