2012-11-30 44 views
-6

可能重複:
Delete all items from a c++ std::vector刪除向量C中的所有元素++

我想用一個迭代開始是搞亂這件事,因爲這只是迭代26次,每2個元素跳過。我還能怎麼做?

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

'vector.clear()'? – GManNickG

+1

即使你自己沒有發現'clear',閱讀'erase'的文檔本來就是一個開始。 -1。 – DevSolar

+0

@jogojapan:這個問題並不完全相同。 –

回答

9

您調用std::vector::clear()方法:

myVector.clear(); 

,我已經從vector改變了實例名稱myVector。對實例使用類的名稱並不是一個好主意。

8

std::vectorclear成員,你知道:

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

無論如何,因爲你從左邊的大小也將萎縮擦除。儘管它效率不高,但它的工作方式與你打算的方式相同,因爲每次迭代都必須向前進行O(N)個副本。

void clearVector() { 
    for (int i = 0; i < 52; i++) { 
     vector.erase(vector.begin()); 
    } 
} 
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(); 

所以你不需要進行迭代。

+1

爲什麼不'vec.end()'? – GManNickG

+0

只是爲了強調它刪除一個範圍,如果last = vec.end(),最好直接使用vec.clear()。我剛剛選擇了一個「特殊」範圍,即所有的元素,也許我應該只寫N而不是 – ShinTakezou

3

你可以使用std :: vector :: clear()來清空元素或者使用空容器進行交換要快得多。

vec.clear(); 

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

注:您的變量vector不好變量名,最好將其更改爲別的東西。

+0

在C++ 11中,'std :: vector'有一個方法['shrink_to_fit'](http://en.cppreference.com/w/cpp/container/vector/shrink_to_fit),這使得「交換與副本」(或「交換與空」)技巧過時。你現在可以寫'vec.clear(); vec.shrink_to_fit();'擦除矢量的所有元素並減少其容量。 –