У меня много 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;
Для объявления массива 2d вы можете использовать карты
std::maps<int,int> Array2D;
loop{
scanf("%d %d",&a,&b);
Array2D[a]=b;
}
int arr1[][]
вас естьint arr1[][]
, тип arr1 - просто int **. Попробуйте вставить это в шаблон списка.