【问题标题】:Remove all elements in vector C++ [duplicate]删除向量C++中的所有元素[重复]
【发布时间】:2012-11-30 06:38:21
【问题描述】:

可能重复:
Delete all items from a c++ std::vector

我认为在迭代器中使用 begin 会搞砸这件事,因为它只迭代 26 次并跳过每 2 个元素。我还能怎么做?

void clearVector() {
    for (int i = 0; i < 52; i++) {
        vector.erase(vector.begin() + i);
    }
}

【问题讨论】:

  • 即使您自己没有发现clear,阅读erase 的文档也是一个开始。 -1.
  • @jogojapan:这个问题并不完全重复。
  • @MarceloCantos OP 想要从向量中删除 all 元素,建议一种不起作用的方法并询问“我还能怎么做”。这怎么不等于问“如何从向量中删除所有项目”?
  • @jogojapan:拥有相同的标题并不能使问题相同。另一个问题表现出一种不同类型的误解,并且有一个额外的方面——想要在移除后保留对象。这些因素需要对这个问题的需求做出不同的回应。
  • @MarceloCantos 另一个问题最初是关于如何删除所有项目,后来更新为包括“保留对象”。它收到的答案涵盖了两个方面。上述问题所涉及的所有内容都已由另一个问题完全解决。

标签: c++ vector erase


【解决方案1】:

你调用std::vector::clear()方法:

myVector.clear();

我已将实例名称从 vector 更改为 myVector。对实例使用类的名称不是一个好主意。

【讨论】:

    【解决方案2】:

    std::vector 有一个clear 成员,你知道的:

    void clearVector() {
        vector.clear();
    }
    

    无论如何,由于您从左侧擦除,因此大小也会缩小。这可以按照您的意愿工作,尽管它效率低下,因为每次迭代都必须在前面进行 O(N) 次复制。

    void clearVector() {
        for (int i = 0; i < 52; i++) {
            vector.erase(vector.begin());
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用 std::vector::clear() 清除元素或与空容器交换更快。

      vec.clear(); 
      

      std::vector<DataType>().swap(vec);
      

      注意:你的变量vector 不是好的变量名,最好改成别的。

      【讨论】:

      • 在 C++11 中,std::vector 有一个方法 shrink_to_fit,它使“swap-with-copy”(或“swap-with-empty”)技巧过时了。您现在可以写 vec.clear(); vec.shrink_to_fit(); 来擦除向量的所有元素并减少其容量。
      • “swap-with-copy”(或“swap-with-empty”)技巧并没有过时。 shrink_to_fit 是否减少容量取决于实现。大多数实现都这样做。但有些可能不会。
      【解决方案4】:
            vec.erase(vec.begin() /* first you want delete */, 
                      vec.begin() + vec.size() /* 1 beyond the last you want to delete */);
            // or if you have to erase all elements:
            vec.clear();
      

      所以你不需要迭代。

      【讨论】:

      • 只是强调它会删除一个范围,如果last = vec.end(),最好直接使用vec.clear()。我刚刚选择了一个“特殊”范围,即所有元素,也许我应该只写 N
      猜你喜欢
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 2017-03-04
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      相关资源
      最近更新 更多