[英]How to free memory for vector of vectors (C++)
我有一个vector<vector<double>> elem
并且我想在我的程序中多次释放它的内存。
我尝试使用
vector<vector<double>>().swap(elem);
甚至是一个for cicle
for(int i=0; i<elem.size();i++)
vector<double>().swap(elem[i]);
vector<vector<double>>().swap(elem);
elem.resize(dim, vector<double>(0));
(我希望第一个维度是某个数字dim
)
但是当我打电话
cout<<elem[0].size();
在我的程序中,输出不断增长,即使我刚刚使用了上述方法。 向量的“主要”大小不存在此问题。
IE
cout<<elem.size();
总是输出dim
编辑:我知道 clear() 但我想释放向量,shrink_to_fit() 也不起作用。 这也是在 main 之外的一个函数中实现的,如下所示:
void arrayReset(vector<vector<double>> elem) {
for(int i=0; i<elem.size();i++)
vector<double>().swap(elem[i]);
vector<vector<double>>().swap(elem);
elem.resize(dim, vector<double>(0));
}
如何释放向量的内存
无论元素类型如何,所有向量的方法都是相同的。
步骤1:删除向量的元素。 最简单的方法是clear
成员函数。 这一步之后, size
成员函数会返回0。
第二步:调用shrink_to_fit
成员函数,请求释放内存。 在这一步之后, capacity
可能会返回 0。
从技术上讲, shrink_to_fit
是语言实现不需要shrink_to_fit
的请求。 释放内存的唯一保证方法是销毁向量。 例子:
{
std::vector<std::vector<double> vector;
// use vector here
}
// memory has been deallocated
我想在我的程序中多次释放它的内存。
请注意,这通常比不多次释放要慢。 我建议确保你想要一些真正有用的东西。
新的功能void arrayReset(vector<vector<double>> elem) {
获取您的矢量和的COPY [可能]清除它; 你永远不会在调用函数中看到它。
如果您通过引用传递您的向量,您将操作原始向量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.