2014-01-31 41 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)里面,使它成为二维。