2012-12-05 218 views
8

對於谷歌和stackoverflow搜索無法幫助我我別無選擇,只能問你們幫忙。向量數組C++ - 向添加元素添加元素時的好奇行爲

我想使用一個向量數組 - 我知道這個數組只包含兩個向量。因此

vector<double> testVect[1]; 

現在,當我想要的元素添加到陣列中包含我使用的第一個矢量

testVect[0].push_back(0); 

到目前爲止,一切似乎確定 - 不幸的是添加元素的第一個向量在某種程度上也增加了同樣的元素(在這種情況下是0)也是第二個向量。

有人能告訴我這種行爲的原因嗎? (請) - 也許是一種解決方法。 目前我有使用Visual Studio 6(僱主將不會安裝新的編譯器 - 我已經激怒了我的同事:d

+3

'vector testVect [1];'只做一個向量。它是一個向量的數組,最大索引爲'0'。是什麼讓你覺得還有第二個元素,或者它也會受到push_back的影響? –

+0

我混淆了初始化一個向量並訪問它的元素。在C++中,開始用0計算向量元素。因此,如果一個向量包含2個元素,您將通過向量[0]訪問第一個元素。這就是爲什麼我認爲寫testVect [1]會產生兩個向量的數組。謝謝:) –

+0

再次被低估 - 這一次沒有明顯的原因...有時候人們會感到困惑。 –

回答

16

如果你想兩個向量,你應該聲明:

vector<double> testVect[2]; 

然後在代碼中使用testVect[0]testVect[1]

你應該讓你的編譯器的所有警告。

順便說一句,你可以安裝一個最近的Linux發行版,與最近的GCC編譯器(例如, 4.7),並運行它爲g++ -Wall -g它肯定會警告你,如果你靜態訪問testVect越界,就好像你已經有了。

GNU/Linux和GCC都是免費的,所以你的經理可能會很開心。

+0

大聲笑很好的抓住! –

+0

嗯我沒有開放的客戶端,不能安裝任何軟件沒有乞求IT部門先允許它:(仍然感謝您的建議:) –

+0

okey啓用所有警告是有道理的 - 再次感謝 –