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

Calling clear on an STL container of STL containers

本文关键字:STL clear 调用      更新时间:2023-10-16

我正在使用

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);