在STL容器的STL容器上调用clear

时间:2018-10-01 15:06:05

标签: c++ stl

我正在使用

std::vector<std::vector<int>> S;,但该问题也可以应用于嵌套的任何其他维度。

要从S中清除内容,从效率/内存的角度来看,足以调用S.clear();还是应该首先clear存储的容器(在这种情况下为{{1 }},然后将std::vector<int>设置为:

S.clear();

3 个答案:

答案 0 :(得分:6)

不需要在嵌套向量上调用clear()。当您在最外层向量上调用clear()时,它将破坏向量中的每个元素。反过来,这将破坏所有嵌套向量。

std::vector是一种RAII类型,因此,只要将RAII类型存储在其中,它就会做正确的事,因为这些类型会自己清除。

答案 1 :(得分:1)

只需在最外面的容器上调用th, td { padding: $table-cell-padding; vertical-align: middle; border-top: $table-border-width solid $table-border-color; } 。所包含容器的析构函数将自动清理其空间。唯一需要注意的是,如果嵌套下方某处拥有原始指针。如果您有执行此操作的代码,只需将其更改为使用任何类型的智能拥有指针,按值拥有对象或容器嵌套的另一级别而不是原始指针。

答案 2 :(得分:0)

为确保您确实释放了内存,您可能需要执行以下操作:

std::vector<std::vector<int>>().swap(S);