2012-03-20 78 views
0

我正在學習STL,然後我想「我會製作一個2D陣列!」但無論...2d帶有錯誤值的矢量

編碼這樣的:

vector< vector<int> > vetor; 

vetor.resize(10); 
vetor[0].resize(10); 

for(int i = 0; i < vetor.capacity(); i++){ 
    for(int h = 0; h < vetor[0].capacity();h++){ 
     vetor[i][h] = h; 
    } 

} 

直到這裏,好嗎。但是當我嘗試以顯示陣列值使用此:

for(int i = 0; i < vetor.capacity(); i++){ 
    cout << "LINE " << i << ": "; 
    for(int h = 0; h < vetor[0].capacity();h++){ 
     cout << vetor[i][h] <<" "; 
    } 
    cout << "\n"; 
} 

而且結果是真的錯了:

LINE 0: 4 5 6 7 8 9 6 7 8 9 
LINE 1: 0 1 2 3 0 1 2 3 0 1 
LINE 2: 0 1 2 3 0 1 2 3 0 1 
LINE 3: 0 1 2 3 0 1 2 3 0 1 
LINE 4: 0 1 2 3 0 1 2 3 0 1 
LINE 5: 0 1 2 3 0 1 2 3 0 1 
LINE 6: 0 1 2 3 0 1 2 3 0 1 
LINE 7: 0 1 2 3 0 1 2 3 0 1 
LINE 8: 0 1 2 3 0 1 2 3 4 5 
LINE 9: 0 1 2 3 4 5 6 7 8 9 

發生了什麼事與我的計劃?它沒有打印正確的值!

回答

3

幾個問題:

您只調整第一個向量的大小。你需要調整它們的全部。

而是考慮使用這樣的:

vector< vector<int> > vetor (10, vector<int>(10, 0)); 

這將創建向量的10×10矢量。

vector有一個構造函數(size_t size,T default_value),它構造了大小爲default_value的元素的向量。

如果向量的大小在編譯時已知並且不會改變,您也可以使用std :: array來獲得輕微的性能增益。

其次使用矢量::尺寸()不矢量::容量(),以確定向量的大小(容量是指後備存儲器,並且可以在很大程度上忽略除了優化)

for(int i = 0; i < vetor.size(); i++){ 
    for(int h = 0; h < vetor[0].size(); h++){ 
     vetor[i][h] = h; 
    } 
} 

當您調整vetor [0] .resize(10)的大小時,您只調整第一個元素的大小。

你將需要:

vetor[0].resize(10) 
vetor[1].resize(10) 
vetor[2].resize(10) 
. 
. 
vetor[10].resize(10) 

做你想做的事情。

(換句話說每個向量在向量的向量具有潛在不同的尺寸,這不是一個矩陣類。)

+0

除了這個,他需要數到'尺寸()',不'capacity()',儘管在這種情況下,它們可能是相同的。 – 2012-03-20 23:22:47

+0

或更好的:'std :: array <10,std :: array <10, int>>' – 2012-03-20 23:23:38

+0

但我在調整vetor.resize(x)和vetor [0] .resize(y)時要做什麼? 在哪裏我可以看到一個可見的例子? – 2012-03-20 23:24:45