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

标签 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[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/

相关文章:

c++ - 实现一个动态数组(我可以访问不存在的位置)

c++ - 您如何生成介于一定数量之间的随机数量的数字?

C++ 我需要为一个函数到处写 throw 子句吗?

c++ - 分析 DLL/LIB 膨胀

c++ - 调整外部 vector 的大小会复制内部 vector 吗?

返回 R 中向量中条件选择对的最大值

r - 按组在 data.table 中创建新列

c++ - 在 C++ 中查找 vector 的最小元素

c++ - 为什么 const 数组优先绑定(bind) const T& 参数而不是 T&& 参数?

c++ - 将 QQuickView 元素添加到现有窗口