保留单独的指向容器项目的指针

这个问题在这里已经有了答案:

  • 迭代器失效规则4个答案

  • 对于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?