【问题标题】:Vector values overwritten by last value in a loop向量值被循环中的最后一个值覆盖
【发布时间】:2015-04-14 14:50:03
【问题描述】:

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

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

有人知道如何解决吗?

谢谢

【问题讨论】:

  • "...但是在每次迭代中..."我没有看到循环,那么我们如何识别问题?
  • 看起来你一遍又一遍地重用同一个指针,并在循环的每次迭代中更改指向的对象。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    与其反复使用您的 cloud 变量(这是您的问题的根源),我会切断中间人

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

    【讨论】:

      猜你喜欢
      • 2018-04-22
      • 2013-10-03
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 2020-03-29
      • 2016-02-24
      相关资源
      最近更新 更多