如何为向量的向量释放内存 (C++)
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();
在我的程序中有无数次,输出一直在增长,即使我刚刚使用了上述方法。向量的“主要”大小不存在此问题。
即
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));
}
How to free memory for vector
无论元素类型如何,所有向量的方法都是相同的。
第 1 步:删除向量的元素。最简单的方法是 clear
成员函数。在这一步之后,size
成员函数将 return 0.
第二步:调用shrink_to_fit
成员函数请求释放内存。经过这一步,capacity
可能return0.
从技术上讲,shrink_to_fit
是语言实现不需要满足的请求。唯一保证释放内存的方法是销毁向量。示例:
{
std::vector<std::vector<double> vector;
// use vector here
}
// memory has been deallocated
I want to deallocate its memory many times in my program.
请注意,这通常比多次不解除分配要慢。我建议确保您想要真正有用的东西。
您的新函数 void arrayReset(vector<vector<double>> elem) {
获取向量的 COPY 并[可能] 清理它;你永远不会在调用函数中看到它。
如果您通过引用传递矢量,您将操纵原始矢量。
我有一个 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();
在我的程序中有无数次,输出一直在增长,即使我刚刚使用了上述方法。向量的“主要”大小不存在此问题。
即
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));
}
How to free memory for vector
无论元素类型如何,所有向量的方法都是相同的。
第 1 步:删除向量的元素。最简单的方法是 clear
成员函数。在这一步之后,size
成员函数将 return 0.
第二步:调用shrink_to_fit
成员函数请求释放内存。经过这一步,capacity
可能return0.
从技术上讲,shrink_to_fit
是语言实现不需要满足的请求。唯一保证释放内存的方法是销毁向量。示例:
{
std::vector<std::vector<double> vector;
// use vector here
}
// memory has been deallocated
I want to deallocate its memory many times in my program.
请注意,这通常比多次不解除分配要慢。我建议确保您想要真正有用的东西。
您的新函数 void arrayReset(vector<vector<double>> elem) {
获取向量的 COPY 并[可能] 清理它;你永远不会在调用函数中看到它。
如果您通过引用传递矢量,您将操纵原始矢量。