【发布时间】:2021-01-24 02:56:33
【问题描述】:
根据thisclear() 将销毁所有对象,但不会释放内存。此外,当我遇到删除集合中所有元素的必要性时,我发现set.clear() is linear in size (destructions) 的时间复杂度是constant for set.swap()。 (删除向量的所有元素时同样的问题)
那么在这种情况下,我们是不是应该总是在可能的情况下将 swap() 与空的 STL 容器一起使用? 因此 clear() 与空容器交换相比有什么需要和好处。
抱歉,如果这看起来微不足道,但我找不到任何相关信息。 谢谢!
【问题讨论】:
-
有时(通常在我的情况下)您清除容器并立即开始重新填充它。如果您释放内存,您将重新进行动态分配和重新分配。糟糕。
-
值得注意的是
vector有shrink_to_fit,这比用空容器交换的习语要清楚得多。这个成语来自这个函数之前的时间,但它已经存在了 9 年。 -
shrink_to_fit的优势是编译器可以忽略你,如果它可以看到保留内存的好处。不幸的是,它也可以无缘无故地忽略您,因此请确保您的标准库实现提供您想要的结果。