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

时间:2015-04-14 14:50:03

标签: c++ loops pointers vector point-cloud-library

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

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

有没有人知道如何修复它?

由于

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

不是一遍又一遍地重复使用你的cloud变量,这是你问题的根源,我会切断中间人

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