显然这不起作用所以代码错了,但我该如何解决呢?
对于我所知道的所有事情,这一切都可能是错误的,但我正在尝试创建一个在运行时创建自己的多维向量。我收到错误: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];
}
}
}
答案 0 :(得分: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
答案 1 :(得分:2)
td指的是外部向量,因此你的resize会折叠row'col空向量的向量。您需要将其调整为仅调整行,然后您的for i循环可以在内部说td [i] .resize(col)以使其成为二维。
答案 2 :(得分: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];
}
}