我认为在迭代器中使用begin会弄乱它,因为它只迭代26次并跳过每2个元素。我怎么能这样做?
void clearVector() {
for (int i = 0; i < 52; i++) {
vector.erase(vector.begin() + i);
}
}
答案 0 :(得分:15)
答案 1 :(得分:10)
std::vector
有clear
成员,您知道:
void clearVector() {
vector.clear();
}
无论如何,既然你从左边擦除,那么尺寸也会缩小。这可以按照你想要的方式工作,虽然效率很低,因为每次迭代都需要在前面做O(N)个副本。
void clearVector() {
for (int i = 0; i < 52; i++) {
vector.erase(vector.begin());
}
}
答案 2 :(得分:3)
你可以使用std :: vector :: clear()来清除元素,或者用空容器交换要快得多。
vec.clear();
或
std::vector<DataType>().swap(vec);
注意:您的变量vector
不是好的变量名称,最好将其更改为其他名称。
答案 3 :(得分: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();
所以你不需要迭代。