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:交换后释放的所有其他向量相关的内存是什么?
答案 0 :(得分:2)
1)是的,对象(此处vector<double>
)被销毁。但值得注意的是,外部vector
(您称之为erase()
的那个)不会改变其容量。
2)是的,它会被清空。您也可以拨打a.clear()
,但不会更改外部媒介的容量。
您可以通过调用shrink_to_fit
(仅限C ++ 11及更高版本)请求删除不必要的容量,但它没有绑定。