我有一个程序在内部处理点云作为特征对象的向量:
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));
答案 0 :(得分:0)
STL向量类保证其数据将存储在单个连续数组中,因此只要您要复制的向量至少与要复制的向量一样大,memcpy()应该是安全的。 / p>
也就是说,使用向量方法或运算符来做你想做的事情会更好,更不容易出错,而不是试图用memcpy()来“落后”。如果你希望memcpy()表现更好,我想你会发现它没有任何区别(虽然你可以测量来验证)。