向量值被循环中的最后一个值覆盖

Vector values overwritten by last value in a loop

我有存储点云指针的向量:

std::vector<pcl::PointCloud<PointType>::Ptr> List;

在一个循环中,我试图 push_back 指向其中的云指针。

pcl::PointCloud<pcl::PointXYZ>::Ptr  cloud(new pcl::PointCloud<pcl::PointXYZ>);

while(condition)
{...    
    List.push_back(cloud);
cloud->clear();
}

它添加了点云,但在每次迭代中,先前存储在向量中的所有值都被新添加的值替换。

假设我添加的最后一个点云的大小是 400,并且我在迭代中添加了 5 个点云。

循环后,如果我检查存储的 5 朵云的大小,结果将是 400 400 400 400 400

有人知道如何解决吗?

谢谢

看起来很像你只创建了一个点云,并且在循环的每次迭代中,你修改点云,将指向它的(另一个)指针添加到矢量,然后重复。

换句话说,您所有的矢量条目都指向同一个云,因此每个修改当然在所有条目中可见。

与其一遍又一遍地重复使用你的 cloud 变量,这是你问题的根源,我会去掉中间人

while(condition)
{   ...    
    List.emplace_back(new pcl::PointCloud<pcl::PointXYZ>);
}