gpt4 book ai didi

C++ - 删除指针引用的 vector 元素

转载 作者:太空狗 更新时间:2023-10-29 20:19:08 25 4
gpt4 key购买 nike

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

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

vector<stPiece> pieces;

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

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

谢谢!

最佳答案

如果您的 mother 指针直接指向 pieces vector 的元素,您将会遇到各种麻烦。

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

要回答您的主要问题:您不能直接删除指针指向的元素,您首先需要在 vector 中搜索以找到它,或者计算它在 vector 中的索引。

不是将指针存储到 pieces 作为 mother 而是元素的索引会使它更健壮,这样至少插入新元素不会破坏现有的母亲。但是从 pieces 中删除仍然会将元素移动到新索引。

使用 std::list对于 pieces 并将迭代器作为 mother 存储到其中可能是一个解决方案。 std::list 的迭代器不会因该列表中的其他元素被删除/添加而失效。如果不同的元素可以有相同的 mother ,你仍然很难找出何时删除 mother 元素,而不是使用 boost::shared_ptr。会更简单。

关于C++ - 删除指针引用的 vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2062242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com