Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ stl deque会重新分配我的元素(c+;+;)吗?_C++_Deque - Fatal编程技术网

C++ stl deque会重新分配我的元素(c+;+;)吗?

C++ stl deque会重新分配我的元素(c+;+;)吗?,c++,deque,C++,Deque,嗨,我需要一个stl容器,它可以像向量一样索引,但不会像向量使用resize或reserve那样移动内存中的旧元素(除非我一开始调用reserve一次,容量足以容纳所有元素,这对我不好)。(注意,我没有将地址绑定到元素,因此我希望这些元素的地址永远不会更改)。所以我找到了这个德克。你认为这样做好吗?重要提示:我只需要向后推,但我需要按需将容器分成小块。在容器的后面或前面添加或删除元素时,“从不使指向其余元素的指针或引用无效”,所以是的,当您只向后推时,元素保持原位。仔细阅读似乎表明,只要在开头或

嗨,我需要一个stl容器,它可以像向量一样索引,但不会像向量使用resize或reserve那样移动内存中的旧元素(除非我一开始调用reserve一次,容量足以容纳所有元素,这对我不好)。(注意,我没有将地址绑定到元素,因此我希望这些元素的地址永远不会更改)。所以我找到了这个德克。你认为这样做好吗?重要提示:我只需要向后推,但我需要按需将容器分成小块。

在容器的后面或前面添加或删除元素时,“从不使指向其余元素的指针或引用无效”,所以是的,当您只向后推时,元素保持原位。

仔细阅读似乎表明,只要在开头或结尾插入,指针就不会无效,而无效指针是数据被复制或移动的标志


它的构造方式与链表不同,链表中的每个元素都是单独分配的,而是作为一组链接数组,可能是出于性能原因。改变中间元素的顺序将需要移动数据。

更像数组数组。链接数组提供了比链接列表更好的遍历,但没有随机访问。谢谢!我可以在不调整大小的情况下使用pushback吗?因为它说“调整大小”可能会移动元素。@user1132655:当然,只要
向后推即可。为什么您认为需要调整大小?对我来说,这听起来像是过早的优化。对不起,我想问的是应该,而不是可以,只是调整大小。似乎优化可能会改变我的元素,所以在这种情况下不应该使用它。@user1132655:如果我读得正确,
resize
附加元素,所以应该没有问题,但老实说,我现在懒得在标准中查找。@user1132655:标准说
resize(sz)
for
sz>size()
相当于重复
insert(end(),T())
。如果cppreference.com是正确的,这仍然不会使指针或引用无效。