相关疑难解决方法(0)

是标准定义的std :: array的大小

在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
Run Code Online (Sandbox Code Playgroud)

它适用于我尝试过的两个编译器(GNU和Intel).此外,我能找到的所有第三方文档(如下所示)都表明std :: array与普通数组一样具有内存效率,它与连续需求相结合意味着它必须具有相同的内存布局.但是我在标准中找不到这个要求.

c++ stl language-lawyer c++11

36
推荐指数
1
解决办法
3290
查看次数

嵌套的std :: arrays中的数据是否保证是连续的?

数据是否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);
}
Run Code Online (Sandbox Code Playgroud)

断言保证成功吗?或者,换句话说,我可以依靠在结尾处没有填充Row吗?

编辑:为了清楚,对于这个例子,我希望整个矩阵的数据是连续的.

c++ multidimensional-array c++11

13
推荐指数
2
解决办法
1384
查看次数