如何从std :: deque中释放内存?

Pet*_*ter 9 c++ stl deque

我用a std::deque来存储相当多的对象.如果我删除了一堆这些对象,在我看来它的内存使用量并没有减少,与std :: vector类似.

有没有办法减少它?我知道在矢量中你必须使用'交换技巧',我认为它也适用于此,但我宁愿避免使用它,因为它需要复制容器中剩下的所有元素(因此需要你有足够的内存来存储每个对象两次).我并不熟悉deque的实现,但我对它的理解是,有可能在没有大量副本的情况下实现这样的事情(而使用矢量显然不是这样).

我正在使用VC++(Dinkumware)STL,如果这有任何区别的话.

Ree*_*sey 15

在std :: deque中无法直接执行此操作.但是,通过使用临时(这基本上是在缩小容量时std :: vector中发生的事情)很容易做到.

这是一篇关于std :: deque好文章,将它与std :: vector进行比较.最底部显示了一种交换和收缩矢量的简洁方法,它与deque的工作方式相同.


Dav*_*vid 5

作为补充信息:

在 C++0x/C++11 中,deque(和其他几个容器)有一个名为“shrink_to_fit”的新函数,它将删除多余的项目并基本上对齐 capacity() == size()

  • 在shrink_to_fit() 之后,容量() 仍然可以高于size() - 这是一个非绑定请求;`void shrink_to_fit(){}` 实际上是一个完全合法的实现。但即使有一个很好的实现,容量()也可能高于大小(),例如,如果容器的元素太少,分配更多内存可能仍然值得。(想想空容器。) (2认同)