加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C – 删除由指针引用的向量元素

发布时间:2020-12-16 09:25:53 所属栏目:百科 来源:网络整理
导读:好吧,我不知道是否可能,但事情是: struct stPiece{ /* some stuff */ stPiece *mother; // pointer to the piece that created this one};vectorstPiece pieces; 是否可以将“母亲”引用的作品从片段中删除,仅将该指针作为参考?怎么样? 它会混淆其他参考
好吧,我不知道是否可能,但事情是:

struct stPiece
{
  /* some stuff */
  stPiece *mother; // pointer to the piece that created this one
};

vector<stPiece> pieces;

是否可以将“母亲”引用的作品从片段中删除,仅将该指针作为参考?怎么样?

它会混淆其他参考吗? (即如果它不是向量中的最后一个元素,则通过将下一个元素移动到其他存储位置,而另一个’*母亲’保持不变).当然,我假设所有子片段都将被删除(因此我不需要更新任何指向同一母亲的指针).

谢谢!

解决方法

如果你的母指针直接指向碎片矢量的元素,你将遇到各种麻烦.

从片段中删除元素将在更高的索引处移动元素的所有位置.即使插入元素也会使所有指针无效,因为向量可能需要重新分配它的内部数组,这可能会将所有元素转移到内存中的新位置.

回答你的主要问题:你不能直接删除指针所在的元素,首先需要通过向量搜索来找到它,或者在向量中计算它的索引.

不将指针存储为碎片作为母亲,而是元素的索引将使其更加健壮,因此至少插入新元素不会破坏现有的母亲.但是从碎片中删除仍会将元素转移到新索引.

使用std::list作为片段并将迭代器存储到母亲可能是一个解决方案.如果删除/添加该列表中的其他元素,则std :: list的迭代器不会失效.如果不同的元素可以拥有相同的母亲,你仍然有一个问题,找出何时删除母元素,比使用boost::shared_ptr更简单.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读