是否需要清除 STL 向量

Posted

技术标签:

【中文标题】是否需要清除 STL 向量【英文标题】:Is it desirable to clear STL vector 【发布时间】:2012-06-05 03:52:25 【问题描述】:

一个简单的问题 - 可能是关于风格的。 是否需要在不再需要向量时清除/清空向量,或者当不再需要容器时是否可以简单地依靠 STL 自行清理。

在这种情况下,我说的是不包含指针或其他需要删除的对象的基本向量,例如。

std::vector<double> myVector;
// use it
// finished with it
// use clear?
myVector.clear();

【问题讨论】:

std::vector&lt;double,double&gt;? 检查你的语法。 vector&lt;double&gt; 更像是它,除非你想要 vector&lt;vector&lt;double&gt;&gt; 抱歉,复制了地图定义 - 现在已更正。 How to release std::vector if there is no heap memory 的可能重复项 另外,请参阅***.com/questions/2253969/… 了解有关矢量内存管理的信息。 【参考方案1】:

清除向量没有任何好处,因为它不能保证放弃其存储空间。见capacity()

如果你真的很关心向量使用的内存,你可以用一个小技巧将它替换为一个空向量:

std::vector<double>().swap(myVector);

当然,最简单的方法是让向量超出范围,它会自动销毁,并释放所有存储空间。

【讨论】:

感谢 Naveen、Bukes 和 Mark。我认为可能是这种情况,但想确认一下,因为感觉有点“不精简”。 @GManNickG,现在假设每个人都可以使用 C++11 功能还为时过早。 @MarkRansom:但对于那些这样做的人来说,值得一提的是:)【参考方案2】:

当矢量对象超出范围时,与其关联的资源将被回收。

【讨论】:

【参考方案3】:

无需调用clearvector 会自行处理。仅当您想再次使用该对象但想删除其所有内容时才使用clear

【讨论】:

以上是关于是否需要清除 STL 向量的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 C++ 中更改向量的开始位置以清除其前 n 个元素?

STL推力多向量变换?

生产中的 STL 向量和 Boost 多阵列 [重复]

将地图值复制到 STL 中的向量

在函数中返回向量后清除内存

Google 协议缓冲区和 stl 向量、映射和提升共享指针