我有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)
答案 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
的单个调用来复制到所有这些第二级缓冲区。