我想用一個迭代開始是搞亂這件事,因爲這只是迭代26次,每2個元素跳過。我還能怎麼做?
void clearVector() {
for (int i = 0; i < 52; i++) {
vector.erase(vector.begin() + i);
}
}
我想用一個迭代開始是搞亂這件事,因爲這只是迭代26次,每2個元素跳過。我還能怎麼做?
void clearVector() {
for (int i = 0; i < 52; i++) {
vector.erase(vector.begin() + i);
}
}
std::vector
有clear
成員,你知道:
void clearVector() {
vector.clear();
}
無論如何,因爲你從左邊的大小也將萎縮擦除。儘管它效率不高,但它的工作方式與你打算的方式相同,因爲每次迭代都必須向前進行O(N)個副本。
void clearVector() {
for (int i = 0; i < 52; i++) {
vector.erase(vector.begin());
}
}
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();
所以你不需要進行迭代。
爲什麼不'vec.end()'? – GManNickG
只是爲了強調它刪除一個範圍,如果last = vec.end(),最好直接使用vec.clear()。我剛剛選擇了一個「特殊」範圍,即所有的元素,也許我應該只寫N而不是 – ShinTakezou
你可以使用std :: vector :: clear()來清空元素或者使用空容器進行交換要快得多。
vec.clear();
或
std::vector<DataType>().swap(vec);
注:您的變量vector
不好變量名,最好將其更改爲別的東西。
在C++ 11中,'std :: vector'有一個方法['shrink_to_fit'](http://en.cppreference.com/w/cpp/container/vector/shrink_to_fit),這使得「交換與副本」(或「交換與空」)技巧過時。你現在可以寫'vec.clear(); vec.shrink_to_fit();'擦除矢量的所有元素並減少其容量。 –
'vector.clear()'? – GManNickG
即使你自己沒有發現'clear',閱讀'erase'的文檔本來就是一個開始。 -1。 – DevSolar
@jogojapan:這個問題並不完全相同。 –