gpt4 book ai didi

c++ - 保证元素位置固定的容器

转载 作者:行者123 更新时间:2023-11-28 00:09:45 24 4
gpt4 key购买 nike

是否有 C++ 容器可以保证无论发生什么变化项目都有一个固定的指针?

例如,std::vector 可能会在发生 push_back 或 erase 时更改项目的地址。所以这个改完之后item的地址就变成垃圾了。那么,有没有一种容器在容器变化的时候不会改变内存中item的地址呢?

附言编译时大小或固定大小不是一个选项

编辑:正如@Joachim Pileborg 所说,这是 XY 问题,或者实际上是 XYZ 问题! Z 是这个问题。 Y是以下一个: Keeping vector of iterators of the data

原来的:

我有一组 Points(x,y) 的数据。此 Points 将进入管道。结果应该是:

  • 一组
  • 每行的一组...换句话说,一组点

我不想复制点并按值返回它们。我知道只有 xyPoint 无需担心复制它。然而,在我看来,它是模板化问题,在某些情况下可能是更大的对象。

最佳答案

Is there C++ container that guarantees a fixed pointer for items what ever changes happened?

如果通过任何方式您包括删除所指向的项目,则只有 std::array 是这样的容器,因为您无法从中删除元素。

如果您的意思是除了删除指向的项目之外的任何其他内容,那么所有基于节点的容器都具有该属性,如评论中所指出的那样。此类标准容器是 std::liststd::forward_liststd::map std::multimap , std::setstd::multiset。从任何这些容器中删除或修改(如果可以修改)项目不会使迭代器、指针或对元素的引用无效。

此外,如果您将指针存储在 std::vector 或其他没有该属性的容器中,那么存储的指向该对象的指针仍然有效,即使索引、指针、引用和存储指针的迭代器变得无效。 boost 中有一个 stable_vector 模板,它存储指向元素的指针,并且不会在修改容器时使迭代器或指向元素的指针失效。如果元素被删除,索引当然会变得无效,显然它没有连续内存的优势。

关于您的原始问题:

鉴于您的要求,将一组迭代器/指针返回到原始容器似乎确实合适。如果稍后修改原始容器时迭代器必须保持有效,例如通过添加更多点或删除未被任何分区引用的点,那么原始容器的类型必须确实如本页所讨论的那样。

关于c++ - 保证元素位置固定的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33779308/

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