将memcpy与特征类型的向量一起使用是否安全?

时间:2013-12-06 21:22:04

标签: c++ eigen

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

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

此程序需要将这些点云转换为不同的序列化格式。以下是其他类型的格式:

struct Point32 {
  float x;
  float y;
  float z;
};
std::vector<Point32> point_cloud_other;

问题是,使用memcpy来保证在x86 / x86_64计算机上复制特征点云是否安全? “安全”我指的是数据的完整性。也就是说,在不破坏点云的情况下这样做是否安全:

point_cloud_other.resize(point_cloud.size());
memcpy(point_cloud_other.data(), point_cloud.data(), 
       point_cloud.size() * sizeof(Eigen::Vector3f));

1 个答案:

答案 0 :(得分:0)

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

也就是说,使用向量方法或运算符来做你想做的事情会更好,更不容易出错,而不是试图用memcpy()来“落后”。如果你希望memcpy()表现更好,我想你会发现它没有任何区别(虽然你可以测量来验证)。