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