std::memcpy 并从 2D 矢量复制数据

std::memcpy and copying data from 2D vector

我有 int *a 用于 5x4 矩阵,其中 5 是行,4 是列。

矩阵的内存分配是列是连续的,每一行都在单独的列之后开始。

我喜欢从vector< vector <int>> b;

复制数据

b 也有相同的大小和维度有 5 行和 4 列。

我如何获取 b 的数据是

b.resize(5);
for(int i = 0; i < 5; i++){
    b[i].resize(4);
}

我喜欢将数据从 b 复制到 a。 是否可以使用 std::memcpy(a, &b, sizeof (int)*20)?

编辑:

对不起,我喜欢用另一种方式复制。 std::memcpy(&b, a, sizeof (int)*20)

不可能使用单个 std::memcpy 从展平矩阵 (int[]) 到适当的矩阵 (std::vector<std::vector<int>>)。有两个原因。首先,没有办法告诉 std::memcpy 矩阵维度。第二,std::vector矩阵中的'rows'不需要在内存中是连续的,但是std::memcpy只复制到一个地址。

b 在内存中有一个连续的缓冲区,可通过其 data() 方法访问。这个缓冲区的每个元素都是另一个 std::vector,它又有自己的指向其他地方的缓冲区。这意味着您不能使用对 memcpy 的单个调用来复制到所有这些二级缓冲区。