【问题标题】:will stl deque reallocate my elements (c++)?stl deque 会重新分配我的元素(c++)吗?
【发布时间】:2012-10-25 11:33:25
【问题描述】:

您好,我需要一个 stl 容器,它可以像向量一样被索引,但不会像向量那样移动内存中的旧元素,调整大小或保留(除非我在开​​始时调用 Reserve 一次,其容量足以容纳所有元素,这对我不利)。 (注意我确实地址绑定到元素,所以我希望这些元素的地址永远不会改变)。所以我找到了这个双端队列。你认为这对这个目的有好处吗?重要提示:我只需要推回,但我需要按需小块扩展容器。

【问题讨论】:

    标签: c++ deque


    【解决方案1】:

    std::deque“从不使指针或对其余元素的引用无效”在其后面或前面添加或删除元素时,所以是的,当您只有 push_back 元素保持原位时。

    【讨论】:

    • 谢谢!我可以在不调整大小的情况下使用推回吗?由于它是调整大小可能会移动元素。
    • @user1132655:当然,只是push_back。为什么你认为你需要resize?对我来说,这听起来像是过早的优化。
    • 对不起,我想问应该,而不是可以,只是调整大小似乎优化可能会改变我的元素,所以在这种情况下不应该使用它。
    • @user1132655:如果我没看错cppreference.comresize 追加元素,所以应该没问题,不过老实说我懒得看现在就在标准中。
    • @user1132655:标准说resize(sz) for sz > size() 等同于重复insert(end(), T())。如果 cppreference.com 是正确的,那不应使指针或引用无效。
    【解决方案2】:

    仔细阅读the documentation似乎表明,只要在开头或结尾插入它就不会使指针无效,而使指针无效则表明数据正在被复制或移动。

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

    【讨论】:

    • 更像一个数组数组。链接数组提供比链接列表更好的遍历,但没有随机访问。
    猜你喜欢
    • 1970-01-01
    • 2012-07-18
    • 2013-03-07
    • 2011-01-22
    • 2021-07-17
    • 2019-10-12
    • 2018-10-03
    • 2021-06-22
    • 2011-11-26
    相关资源
    最近更新 更多