C++ 将memcpy与特征类型的向量一起使用安全吗?

C++ 将memcpy与特征类型的向量一起使用安全吗?,c++,eigen,C++,Eigen,我有一个程序,在内部处理点云作为特征对象的向量: std::vector<Eigen::Vector3f> point_cloud; STL vector类保证其数据将存储在单个连续数组中,因此只要要复制的向量至少与要复制的向量一样大,memcpy()就应该是安全的 也就是说,使用向量方法或运算符来做您想要做的事情,而不是试图用memcpy()来“背着它走”,这样会更好,也更不容易出错。如果您希望memcpy()的性能更好,我想您会发现它没有任何区别(尽管您可以测量以验证这一点)。

我有一个程序,在内部处理点云作为特征对象的向量:

std::vector<Eigen::Vector3f> point_cloud;

STL vector类保证其数据将存储在单个连续数组中,因此只要要复制的向量至少与要复制的向量一样大,memcpy()就应该是安全的


也就是说,使用向量方法或运算符来做您想要做的事情,而不是试图用memcpy()来“背着它走”,这样会更好,也更不容易出错。如果您希望memcpy()的性能更好,我想您会发现它没有任何区别(尽管您可以测量以验证这一点)。

为什么要使用
memcpy
?使用
std::copy
std::copy\u n
,它总是会做正确的事情(如果被复制的对象是POD,它可以在内部调用
memcpy
),我会说“不”,但如果有一些迹象表明
Eigen::Vector3f
是什么样子,它可能比肠道反应更好。如果你的代码> Poot32/<代码>是代码> > EGEN::向量3f <代码>,那么也许……但是它仍然不是完全安全的C++编程。但是<代码> MycPy < /Cord-ing非POD是未定义的行为?
struct Point32 {
  float x;
  float y;
  float z;
};
std::vector<Point32> point_cloud_other;
point_cloud_other.resize(point_cloud.size());
memcpy(point_cloud_other.data(), point_cloud.data(), 
       point_cloud.size() * sizeof(Eigen::Vector3f));