在 STL 容器的 STL 容器上调用 clear
Calling clear on an STL container of STL containers
我正在使用
std::vector<std::vector<int>> S;
但问题也可以应用于嵌套的任何其他维度。
要从S
清除内容,从效率/内存的角度来看,调用S.clear();
是否足够,还是应该首先clear
存储的容器,在这种情况下std::vector<int>
然后S.clear();
为:
std::vector<std::vector<int>>::iterator iter;
for (iter = S.begin(); iter != S.end(); iter++) {
iter->clear();
}
S.clear();
不需要在嵌套向量上调用clear()
。 当你在最外层的向量上调用clear()
时,它将破坏向量中的每个元素。 这反过来会破坏任何嵌套向量。
std::vector
是 RAII 类型,因此只要您将 RAII 类型存储在其中,它就会执行正确的操作,因为这些类型会在自己之后清理。
只需在最外层的容器上调用clear
。所包含容器的析构函数将自动清理其空间。唯一需要注意的是,如果你在嵌套的某个地方拥有原始指针。如果您有执行此操作的代码,只需将其更改为使用任何类型的智能拥有指针、按值拥有对象或其他级别的容器嵌套而不是原始指针。
为了确保您确实释放了内存,您可能需要执行以下操作:
std::vector<std::vector<int>>().swap(S);
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 在C应用程序中运行C++(带有STL)函数
- 使用2个键的cpp-stl::优先级队列排序不正确
- 在STL容器中使用模板类
- 用C++中的CPerson(类)类型的对象初始化STL矢量
- 将stl字符串缩小到小于15个字符的容量
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 检查函数返回类型是否与STL容器类型值相同
- STL算法函数在多个一维容器上的使用
- 如果 std::vector::clear() 不是静态的,如何在没有实例的情况下调用它?
- 在STL - C++中按成绩对学生列表进行排序?
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- λ可以适应STL吗?
- 为什么使用 NDK 不能存在不同的 stl 实现?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 在 STL 容器的 STL 容器上调用 clear
- STL 容器调用的 Clear() 方法是否删除堆对象
- STL vector.clear()导致内存双元释放或pthreads程序损坏
- 在c++ STL容器对象上不调用clear()而导致内存泄漏