【发布时间】:2012-10-25 11:33:25
【问题描述】:
您好,我需要一个 stl 容器,它可以像向量一样被索引,但不会像向量那样移动内存中的旧元素,调整大小或保留(除非我在开始时调用 Reserve 一次,其容量足以容纳所有元素,这对我不利)。 (注意我确实地址绑定到元素,所以我希望这些元素的地址永远不会改变)。所以我找到了这个双端队列。你认为这对这个目的有好处吗?重要提示:我只需要推回,但我需要按需小块扩展容器。
【问题讨论】:
您好,我需要一个 stl 容器,它可以像向量一样被索引,但不会像向量那样移动内存中的旧元素,调整大小或保留(除非我在开始时调用 Reserve 一次,其容量足以容纳所有元素,这对我不利)。 (注意我确实地址绑定到元素,所以我希望这些元素的地址永远不会改变)。所以我找到了这个双端队列。你认为这对这个目的有好处吗?重要提示:我只需要推回,但我需要按需小块扩展容器。
【问题讨论】:
std::deque“从不使指针或对其余元素的引用无效”在其后面或前面添加或删除元素时,所以是的,当您只有 push_back 元素保持原位时。
【讨论】:
push_back。为什么你认为你需要resize?对我来说,这听起来像是过早的优化。
resize 追加元素,所以应该没问题,不过老实说我懒得看现在就在标准中。
resize(sz) for sz > size() 等同于重复insert(end(), T())。如果 cppreference.com 是正确的,那不应使指针或引用无效。
仔细阅读the documentation似乎表明,只要在开头或结尾插入它就不会使指针无效,而使指针无效则表明数据正在被复制或移动。
它的构造方式不太像链表,其中每个元素都是单独分配的,而是作为一组链接数组,大概是出于性能原因。改变中间元素的顺序将需要移动数据。
【讨论】: