代码之家  ›  专栏  ›  技术社区  ›  Tryer

在STL容器上调用clear

  •  0
  • Tryer  · 技术社区  · 8 年前

    我正在使用

    std::vector<std::vector<int>> S;

    从中清除内容 S S.clear(); 还是先来一杯 clear 存储的容器,在这种情况下 std::vector<int> 然后 作为:

    std::vector<std::vector<int>>::iterator iter;
    for (iter = S.begin(); iter != S.end(); iter++) {
        iter->clear();
    }
    S.clear();
    
    3 回复  |  直到 8 年前
        1
  •  6
  •   NathanOliver    8 年前

    打电话 clear() 在嵌套向量上不需要。当你打电话的时候 在最外层的向量上,它会破坏向量中的每个元素。这将反过来破坏任何嵌套向量。

    std::vector 是一个RAII类型,所以只要您在其中存储RAII类型,它就会做正确的事情,因为类型会自己清理。

        2
  •  1
  •   Mark B    8 年前

    打个电话就行了 clear 在最外面的容器上。容器的析构函数将自动清理它们的空间。唯一要注意的是,在嵌套的某个地方,您是否拥有原始指针。如果您有这样做的代码,只需将其更改为使用任何类型的智能拥有指针、按值拥有对象或其他级别的容器嵌套而不是原始指针。

        3
  •  0
  •   user10356313 user10356313    8 年前

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