在运行时填充多维矢量



显然这是不起作用的,因此代码是错误的,但是我该如何修复?对于我所知道的所有大声笑可能是错误的,但是我正在尝试创建一个在运行时创建自己的多维向量。我有一个错误: 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];
      }
   }
}

当您使用

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

您需要将适当数量的内存分配给向量的向量。您可以使用以下代码明确设置空的行和列。

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];
  }
}

td是指外向向量,因此您的调整大小会散发出行'col空向量的向量。您需要将其调整大小以使其大小为行,然后您的i循环可以说td [i]。在内部累积(col)以使其二维。

最新更新