std::array<std::array<T,N>, M>
中的数据是否保证连续?例如:
#include <array>
#include <cassert>
int main()
{
enum {M=4, N=7};
typedef std::array<char,N> Row;
typedef std::array<Row, M> Matrix;
Matrix a;
a[1][0] = 42;
const char* data = a[0].data();
/* 8th element of 1D data array should be the same as
1st element of second row. */
assert(data[7] == 42);
}
这个断言是否保证一定成功?换句话说,我能否依赖于 Row
的末尾没有填充数据?
编辑: 为了明确起见,在这个例子中,我希望整个矩阵的数据是连续的。
std::array
中的数据是连续的,但这并不意味着嵌套的std::array
中的整个数据集是连续的。至少对于像我这样的非语言专家来说,这并不明显。 - Emile Cormierstd::array
中的每个元素都是连续的,那么意味着在std::array<std::array<..>>
中的每个std::array
直接相邻。通过递归,这些“子”std::array
也是连续的。一个容器并不会因为它是自己的value_type
而突然失去连续性(如果确实是容器的保证)。_[编辑:但是,这并不意味着最内层的T
都彼此连续。看来这正是你想表达的,所以没问题 :P]_ - Lightness Races in Orbitarray<T>
的末尾并没有要求不含填充或额外数据成员,尽管我承认像样的实现不会这么做。 - Emile Cormier