Khi tôi tạo ra một ma trận sử dụng Eigen, như thế này:Tại sao memcpy không sao chép dữ liệu ma trận Eigen, nhưng std :: copy thành công?
Eigen::MatrixXd M(3,3);
M<< 1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0 ;
std::cout<<M<<std::endl;
sản xuất
1 4 7
2 5 8
3 6 9
tôi có thể đi bộ với một con trỏ qua các dữ liệu, in ấn mỗi phần tử:
double * d = M.data();
for(int i = 0;i<M.size();i++)
{
std::cout<<*d<<" ";
d++;
}
std::cout<<std::endl;
sản xuất
1 2 3 4 5 6 7 8 9
Tôi cũng có thể sử dụng std :: Copy để sao chép nó vào một mảng cùng loại trên stack, sau đó in các phần tử của mảng:
double data_copy[9];
std::copy(M.data(),M.data()+M.size(),data_copy);
for(int i = 0;i<M.size();i++)
{
std::cout<<data_copy[i]<<" ";
}
std::cout<<std::endl;
sản xuất
1 2 3 4 5 6 7 8 9
Tuy nhiên, tôi dường như không thể sử dụng memcpy để làm bản sao tương đương. Đây chỉ quản lý để sao chép các yếu tố đầu tiên:
double data_memcopy[9];
memcpy(data_memcopy,M.data(),M.size());
for(int i = 0;i<M.size();i++)
{
std::cout<<data_memcopy[i]<<" ";
}
std::cout<<std::endl;
sản xuất
1 0 0 0 0 0 0 0 0
Bất kỳ lý do chính đáng tại sao memcpy không được làm những gì tôi mong đợi nó nên? (Hay tôi sử dụng nó không đúng?)