2014-01-31 23 views
0

顯然這不起作用,所以代碼是錯誤的,但我該如何解決它? 這整個事情可能是錯誤的,我知道所有大聲笑,但我試圖創建一個多維向量,在運行時創建自己。我收到一個錯誤:vector subscript out of range在運行時填充多維向量

#include <iostream> 
#include <vector> 

int main(){ 
    int row = 0, col = 0; 
    std::cout << "Size of Row: "; std::cin >> row; 
    std::cout << "Size of Column: "; std::cin >> col; 

    std::vector<std::vector<int>> td; 
    td.resize(row * col); 

    for (int i = 0; i <= row; i++){ 
     for (int j = 0; j <= col; j++){ 
     td[i][j]; 
     } 
    } 
} 

回答

2

您需要爲向量矢量分配適當的內存量。您可以使用以下代碼顯式設置空行和列的數量,而不是調整其大小。

std::vector< std::vector<int> > td(row+1, std::vector<int>(col+1)); 
//+1 is needed because the loop you created is <= 

否則,您可以調整循環並執行以下操作:

std::vector< std::vector<int> > td(row, std::vector<int>(col)); 

for (int i = 0; i < row; i++){ 
    for (int j = 0; j < col; j++){ 
    td[i][j]; 
    } 
} 
3

當您使用

td.resize(row * col); 

td第一維會row*col,但它的第二個方面是還空着。這就是你得到錯誤的原因。

您應該使用

td.resize(row); // set first dimension 
for (int i=0; i<row; i++) // set each second dimenstion 
    td[i].resize(col); 

或者乾脆

vector<vector<int>> td(row, vector<int>(col)); // has rows, each of them has cols 
2

TD指外載體,讓您調整大小摺痕row'col空載體的載體。你需要調整大小來代替,然後你的for循環可以說td [i] .resize(col)裏面,使它成爲二維。