vector<vector<double>> a;
for (int i=0;i<100;i++)
{
vector<double> v(i+1);
iota(v.begin(),v.end(),1);
a.push_back(v);
}
a.erase(a.begin()+10);
vector<vector<double>>(a).swap(a);
问题 1:与 a[10] 关联的内存是否在 a.erase() 之后释放?
问题 2:与所有其他 vector 关联的内存是否在交换后释放?
最佳答案
1) 是的,对象(此处为 vector<double>
)已被销毁。但值得注意的是,外层vector
(您在 erase()
上调用的)不会更改其容量。
2) 是的,它会被清空。您也可以调用a.clear()
但它不会改变外部 vector 的容量。
您可以请求通过调用 shrink_to_fit
删除不必要的容量(仅限 C++11 及更高版本),但它不具有约束力。
关于c++ - 如果 vector 是 vector 的 vector ,vector.swap() 和 vector.erase() 是否释放所有分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39989666/