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

好吧,我不知道是否可能,但事情是:

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

vector<stPiece> pieces;

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

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

谢谢!

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

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

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

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

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

转载注明原文:C – 删除由指针引用的向量元素 - 代码日志