向量值被循环中的最后一个值覆盖
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>);
}
我有存储点云指针的向量:
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>);
}