我在阅读有关双端队列的地方时,发现一条语句,指出pop_back和pop_front只是从双端队列中删除了元素,而留下了指向要删除的元素的指针。

int i=1;
std::deque<int> value:
while(1){
    if(value.size()>10){
        value.pop_front();
        value.shrink_to_fit();
    }
    value.push_back(i);
    i++;
}

为了防止万一,我使用了rinkle_to_fit()。

现在,如果该程序永远运行,并且我们在双端队列中执行了成千上万的推和弹出操作,您是否认为它会炸毁我的内存?
我希望我不会听起来很有趣。

问候

最佳答案

首先让我们了解shrink_to_fit的作用。
std::deque不是连续的内存(不同于 vector ),它使用内存块。这实际上意味着它具有多个大小不同的块。

可能会出现这样的情况,即一个块仅包含1或2或一些X数量的元素,导致无法删除该块。
shrink_to_fit()仅有助于管理这种情况。它尝试移动元素,以便在可能的情况下释放块

结论
shrink_to_fit()与内存分配和释放无关,并且调用有限数量的元素可能毫无用处。

关于c++ - 双端存储释放,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50209422/

10-10 14:19