如何解决如何为向量的向量释放内存C ++
我有一个vector<vector<double>> elem
,我想在程序中多次释放它的内存。
我尝试使用
vector<vector<double>>().swap(elem);
甚至是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();
在我的程序中无数次,即使我刚刚使用了上述方法,输出仍在不断增长。向量的“主要”大小不存在此问题。
即
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));
}
解决方法
如何释放向量的内存
所有向量的方法都是相同的,而不管元素的类型如何。
第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
我想在程序中多次释放其内存。
请注意,这通常比不多次取消分配要慢。我建议您确保您想要真正有用的东西。
,您的新函数void arrayReset(vector<vector<double>> elem) {
获得向量的 COPY 并[可能]对其进行清理;您永远不会在调用函数中看到它。
如果通过引用传递矢量,则将操纵原始矢量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。