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

时间:2017-10-27 09:08:43

标签: c++ c++11 vector memcpy

我有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)

2 个答案:

答案 0 :(得分:1)

无法使用单个std::memcpy从拼合矩阵(int[])转换为适当的矩阵(std::vector<std::vector<int>>)。有两个原因。首先,没有办法告诉std::memcpy矩阵维度。其次,&#39;行&#39; std::vector矩阵中的std::memcpy矩阵不需要在内存中顺序,但# Saving it into a list named R R <- lapply(L, function(l) as.vector(cor(l[[1]], as.data.frame(l)))) 仅复制到单个地址。

答案 1 :(得分:1)

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