保留单独的指向容器项目的指针
这个问题在这里已经有了答案:
对于std::vector
,您可以使用reserve
成员函数来确保为您需要的最大数量的元素预分配连续的内存块。 这意味着除非您超过保留容量,否则元素不会被复制。
所有指向std::deque
中元素的指针在插入或删除元素时也都是无效的。 但是,除了指向要删除的元素的指针之外, std::list
保证不会使这些情况下的任何指针失效。
列表是序列容器,允许您插入和擦除任何地方并在两个方向上迭代。 与载体相比,列表的主要缺点是它们缺乏通过它们的位置直接访问元素。
Deques也是序列容器。 它们具有动态尺寸,可以在两端扩展或缩小。 它们与矢量非常相似,可让您直接访问它们的位置。
你需要问自己:我需要在容器上做什么样的操作?
请注意,list和forward_list在操作时会保留容器的有效性,而deque将使其无效。
请访问http://www.cplusplus.com/以获取有关c ++中容器的更多信息。
解决方案是让矢量持有指向对象的指针,而不是直接包含对象。 然后,您不必担心矢量大小调整,因为调整大小时,对象将保留在内存中的原始位置。
链接地址: http://www.djcxy.com/p/73339.html上一篇: Keeping separate pointers to container items
下一篇: Is it safe to store a pointer to an item in an std::set?