首页 > 解决方案 > 如何为向量向量释放内存(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() 也不起作用。这也是在主要功能之外的功能中实现的,如下所示:

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));
}

标签: c++vectorswap

解决方案


如何为矢量释放内存

无论元素类型如何,所有向量的方式都是相同的。

第 1 步:删除向量的元素。最简单的方法是clear成员函数。在这一步之后,size成员函数将返回 0。

步骤 2:调用shrink_to_fit请求释放内存的成员函数。在这一步之后,capacity可能会返回 0。

从技术上讲,shrink_to_fit是语言实现不需要遵守的请求。释放内存的唯一保证方法是销毁向量。例子:

{
    std::vector<std::vector<double> vector;
    // use vector here
}
// memory has been deallocated

我想在我的程序中多次释放它的内存。

请注意,这通常比不多次释放要慢。我建议确保你想要一些真正有用的东西。


推荐阅读