我有许多 2D 数组,我只会在运行时知道其大小。
int arr1[i][k];
int arr2[i][k];
...
实际上,它们是在 for 循环中创建的。我需要在循环结束时将它们全部存储在内存中:
list<????> mylist;
mylist.push_back(arr1);
mylist.push_back(arr2);
如何将它们推入 std::vector 或 std::list ?我见过的所有例子都需要事先知道数组的大小。
使用可复制和可分配的东西,例如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;
对于二维数组声明,您可以使用地图
std::maps<int,int> Array2D;
loop{
scanf("%d %d",&a,&b);
Array2D[a]=b;
}