向量值被循环中的最后一个值覆盖
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 个云的大小,结果将是400400400400400
有人知道如何解决它吗?
谢谢
看起来你只创建了一个点云,在循环的每次迭代中,你修改点云,添加一个(其他)指向它的指针到向量,然后重复。
换句话说,所有向量条目都指向同一个云,因此每个修改当然可以通过所有条目可见。
与其一遍又一遍地重用你的cloud
变量,这是你问题的根源,我会去掉中间人
while(condition)
{ ...
List.emplace_back(new pcl::PointCloud<pcl::PointXYZ>);
}
相关文章:
- lower_bound()返回最后一个元素
- 获取向量C++中第一个值和最后一个值的和
- 获取用C/C++打印的最后一个字符串
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 为什么我的最后一个 ELSE 条件无法正确执行
- Lower_bound不适用于具有 3 个元素的向量的最后一个元素
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 仅显示链表的最后一个元素
- 测试迭代器是否位于列表中的最后一个
- push_back通过自行创建的对象获取最后一个元素的向量
- 使用 map.end() 访问 map 的最后一个元素
- 当将多个TypedArrayContents数组加载到V8数组中时(数组数组)时,最后一个元素将覆盖所有元素
- COUT:最后一个字符串覆盖第一个字符串
- c ++ 我的 char* 数组被最后一个添加的元素覆盖
- 向量值被循环中的最后一个值覆盖
- 输出字符串使用 C++ 覆盖 Linux 终端上的最后一个字符串
- 最后一个参数将覆盖 SQLite 绑定中的先前参数
- 当类的最后一个实例被破坏/覆盖时调用函数
- vector的最后一个对象覆盖所有对象