如果向量是向量的向量,vector.swap()和vector.erase()是否释放所有分配的内存?

时间:2016-10-12 02:39:43

标签: c++ vector

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.erase()之后释放的[10]相关的记忆?

问题2:交换后释放的所有其他向量相关的内存是什么?

1 个答案:

答案 0 :(得分:2)

1)是的,对象(此处vector<double>)被销毁。但值得注意的是,外部vector(您称之为erase()的那个)不会改变其容量。

2)是的,它会被清空。您也可以拨打a.clear(),但不会更改外部媒介的容量。

您可以通过调用shrink_to_fit(仅限C ++ 11及更高版本)请求删除不必要的容量,但它没有绑定。