2013-07-31 53 views
0

我有一些問題了解什麼const value_type& val意味着在這個函數:std :: vector.resize()中的第二個參數是什麼意思?

void std::vector::resize (size_type n, const value_type& val); 

我讀了C++ reference,並在這裏就是這樣說的:

對象,其內容被複制到的情況下,所添加的元素n大於當前容器大小。 如果未指定,則使用默認構造函數。 成員類型value_type是容器中元素的類型,在矢量中定義爲第一個模板參數(T)的別名。

但是它究竟做了什麼?例如,我有這行代碼:

myVector.resize(10, numeric_limits<double>::infinity()); 

無窮大的內容被複制到myVector如果10比它的當前大小更大?

如果有人可以請解釋,那會很好。

謝謝!

+6

我真的不知道如何描述不清楚。是的,您作爲第二個參數傳遞的對象用於填充最後一個'10 - myVector.size()'元素。 –

+0

C++參考狀態「如果n大於當前容器大小,則通過在末尾插入儘可能多的元素以達到n的大小來擴展內容。如果指定val,則將新元素初始化爲val,否則,它們會被初始化。「所以是的,'val'用於初始化添加到矢量中的任何新元素。分享並享受。 –

回答

4

它將矢量中的所有值設置爲該值,因此如果myVector爲空,則它將包含10個雙精度值,其中無窮大爲值。如果向量中已經有值1.3,2.9,3.6,-1.9和5.2,則接下來的五個元素將是無窮大。

顯然,如果你有一個值或值是什麼,如果向量已經大於10個元素,那麼它沒有區別。

0

儘管使用了一些精巧的語言,但它非常簡單。如果調整大小創建新的元素,那麼他們當然必須用某些東西進行初始化。通常,對於vector<T>,它們將通過調用默認的構造函數T進行初始化。提供第二個參數會將新元素初始化爲該值的副本。

在你的例子中,實際上,調用可以確保向量有10個項目,如果小於這個值,所有新項目都會收到infinity的副本。所以如果你的載體有6個元素,它會得到4個新副本infinity

1

是的。函數可用於增加或減少矢量的大小。但是,如果您使用它來增加大小(如果新大小大於當前大小),必須進入這些新的單元格中。如果你沒有指定第二個參數,那麼這個值就是vector所持有的任何數據類型的默認構造函數;但是,您可以使用第二個參數來指定該默認值應該是什麼。這個的常見用途是指定一個值0,NULL等。

相關問題