声明在运行时已知的2d大小数组的列表(或向量)

时间:2013-11-01 14:19:52

标签: c++ list templates std stdvector

我有很多2D数组,我只知道运行时的大小。

  int arr1[i][k];
  int arr2[i][k];
  ...

实际上它们是在for循环中创建的。在循环结束时我需要所有内存:

   list<????> mylist;
   mylist.push_back(arr1);
   mylist.push_back(arr2);

如何将它们推入std :: vector或std :: list?我见过的所有例子都需要提前知道数组的大小。

2 个答案:

答案 0 :(得分:0)

使用可复制和可分配的内容,例如std::vector。您可以编写自己的包含单个向量的2D类,这是首选选项,也可以使用向量向量。例如(未经测试):

class Array2D
{
 public:
  Array2D(int rows, int cols) : cols_(cols), data(rows*cols) {}
  int& operator()(int i, int j) { return data_[i*cols_ + j]; }
  const int& operator()(int i, int j) const { return data_[i*cols_ + j]; }
  // to-do: add an efficient, exception safe swap method.
 private:
  unsigned int cols_;
  std::vector<int> data_;
};

Array2D arr1(i, j);
Array2D arr2(i, j);
std::list<Array2D> mylist;

std::vector<std::vector<int>> arr1(i, std::vector<int>(k));
std::list<std::vector<std::vector<int>>> mylist;

答案 1 :(得分:0)

对于二维数组声明,您可以使用地图

std::maps<int,int> Array2D;
loop{
    scanf("%d %d",&a,&b);
    Array2D[a]=b;
}