关于c++11 std::vector 使用元素指针时需要留意的一点

这几天在写VO,需要实现一个功能,将二维坐标点按坐标放在平面上的网格里。这个功能很简单,但是为了节约一点内存,我打算将坐标点的指针放到网格里面,需要的时候用指针操作即可:

vector< vector <vector <keypoint*> > > cells;

然而在实际使用的时候却发现,有一大批的点的坐标居然被修改了。我非常确定的一点就是没有地方可以修改坐标值。这时候意识到,在提取了这些特征点之后,我将所有的点都放在了一个vector中,而当存放所有坐标点的vector删除某一元素时,后续的所有点的地址都会发生改变,故在网格中存储点的坐标很容易造成存储了一个野指针。

修改方法:

第一,将cells改为

vector< vector <vector <keypoint> > > cells;

第二,将存储所有特征的的vector改为存储坐标点的指针,然后将所有的特征点都单独new,这样可以保证不改变特征点的地址。

 

2019年2月1日15点26分记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值