-2

可能重复:
从 c++ std::vector 中删除所有项目

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

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

4 回答 4

22

您调用该std::vector::clear()方法:

myVector.clear();

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

于 2012-11-30T06:39:40.473 回答
12

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

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

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

void clearVector() {
    for (int i = 0; i < 52; i++) {
        vector.erase(vector.begin());
    }
}
于 2012-11-30T06:39:44.230 回答
3

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

vec.clear(); 

或者

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

注意:您的变量vector不是好的变量名,最好将其更改为其他名称。

于 2012-11-30T06:45:51.110 回答
2
      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();

所以你不需要迭代。

于 2012-11-30T06:44:48.820 回答