2014-02-19 33 views
1

因此,我正在嘗試編寫一個簡單的代碼,該代碼將從用戶獲取兩個字符串。然後它使用length()獲取字符串的長度,並基於長度創建一個ints的矩陣(2d向量)。然後我需要集中的最後一行和最後一列的值,如果輸入的字符串進行有2 權力的價值觀「快樂」 &「傷心」所產生的基質應該是:即使當下標處於範圍內時,2d向量下標也會超出範圍

0 0 0 0 0 6 
0 0 0 0 0 4 
0 0 0 0 0 2 
10 8 6 4 2 0 

我產生這樣的矩陣:

vector<vector<int>> opt; 
    unsigned int x, y; 
    x = (sequenceOne.length()) + 1; 
    y = (sequenceTwo.length()) + 1; 

    unsigned int p,q; 

    opt.resize(y, vector<int>(x, 0)); // resizes the matrix 

當我嘗試改變矩陣值:

opt[2][2] = 5;  

它工作正常,但是當我去訪問像這樣的最後一行最後一列:

opt[x][y] 

它告訴我「表達:向量下標越界」 我認爲這是與該得到的字符串作爲值使用的長度,但我不能爲我的生活弄清楚爲什麼會導致一個問題。 我試圖使下標不同的變量,不同的順序,和東西像opt [x-1] [y-1],但錯誤仍然發生。

我不確定它是否重要,但我正在使用MS VS2012。

回答

1

數組索引爲0。 xy是數組的大小。您不能將大小值用作索引值。

例如: enter image description here

a是大小5 "a"在索引0處的,"e"在索引4 "e"是在列表中的第五元素。當您嘗試使用5的大小作爲索引時,您可以看到索引5處沒有元素。最後一個元素將被訪問a[size - 1]。雖然請記住,0的大小導致索引爲-1,這是一個無效的索引。

+0

非常感謝。不知道我是如何忽略這一點的。這解決了這個問題。 – user3326004

+0

不客氣!是的,可以很容易忽略這些事情。現在希望它會堅持下去。 :)有時需要一個很好的叮咬讓人們記住事情。 ,p – leetNightshade

0

C++陣列像這樣工作:

vector<int> v = {2, 4, 6, 8} 
//index:   0 1 2 3 

因此,陣列中的最後一個元素實際上是opt[x - 1][y - 1]