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

Vector values overwritten by last value in a loop

本文关键字:最后一个 覆盖 循环 向量      更新时间:2023-10-16

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

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 个云的大小,结果将是400400400400400

有人知道如何解决它吗?

谢谢

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

换句话说,所有向量条目都指向同一个云,因此每个修改当然可以通过所有条目可见。

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

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