是否需要清除 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<double,double>
?
检查你的语法。 vector<double>
更像是它,除非你想要 vector<vector<double>>
。
抱歉,复制了地图定义 - 现在已更正。
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】:无需调用clear
,vector
会自行处理。仅当您想再次使用该对象但想删除其所有内容时才使用clear
。
【讨论】:
以上是关于是否需要清除 STL 向量的主要内容,如果未能解决你的问题,请参考以下文章