2012-08-12 49 views
-1
int main() { 

    vector <int> multiples(1); 

    cout << multiples[0]; 

} 

然而,這將返回0時,我希望它是1,這發生在當我初始化一個元素的矢量,我可以訪問第二元件,向量中不存在的元素,我得到最右邊元素的值(在本例中爲4)。但是我似乎無法得到第一個元素。誰能解釋爲什麼?如何正確訪問矢量的元素?此外</p> <pre><code>int main() { vector <int> multiples(1, 4); cout << multiples[1]; // 4 } </code></pre> <p>,當嘗試訪問:

+0

1是它有多少個元素,而不是索引的位置,索引位置仍然從0開始,就像一個數組。 – Annabelle 2012-08-12 00:30:20

+0

看到這個問題的未來支持您正在嘗試使用的概念:http://stackoverflow.com/questions/2409819/c-constructor-initializer-for-arrays – 2012-08-12 00:38:10

回答

4

vector <int> multiples(1); 

創建爲int的矢量大小爲1,單個元件是值初始化,這對於ìnt意味着零初始化。所以你得到一個有一個條目的矢量,值爲0。而這一個

vector <int> multiples(1, 4); 

創建一個大小爲1的矢量,這次的值爲4。如果您嘗試訪問multiplies[1],您將超出1號大小矢量的範圍,從而調用未定義的行爲。它要初始化值1的兩個元素和4,在C++ 11的載體可以做到這一點:

vector <int> multiples{1, 4}; 
+0

有沒有辦法做'倍數{1,4 }'同時製作一個指定的大小? – 0x499602D2 2012-08-12 00:47:09

+0

@David'multiples {1,4}'使其大小爲2,即元素的數量。您可以隨意添加,例如'倍數{1,2,3,4,5}' – juanchopanza 2012-08-12 00:49:59

1
int main() { 

    vector <int> multiples(1); 

    cout << multiples[0]; 

} 

http://cplusplus.com/reference/stl/vector/vector/

用1個INT元件中,通過初始化產生矢量默認(即int()== 0)。

vector <int> multiples(1, 4); 

在矢量創建具有1個INT元素矢量由4.

cout << multiples[1]; // 4 

它是不正確初始化,因爲只有一個元素。

1

看看這段代碼。你應該看到問題。您沒有按照預期的方式初始化矢量。

int main() 
{ 
    vector <int> multiples(2); // create a vector of size two with default value of 0. 
    multiples[0] = 10; // set element at index 0 = 10 
    multiples[1] = 20; // set element at index 0 = 10 
    cout << multiples[0]; // 10 
    cout << multiples[1]; // 20 
} 
0

其實,你不需要指定向量的大小。 您可以根據需要添加元素(具體對象),這是主要優點和矢量的使用。添加一個元素到矢量可以很容易地完成:

multiples.push_back(1); 
multiples.push_back(4); 

希望它有幫助。

相關問題