объявление списка (или вектора) двумерных массивов размеров, известных во время выполнения

0

У меня много 2D-массивов, для которых я буду знать только размер во время выполнения.

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

На самом деле они создаются в цикле for. Мне нужны все они в памяти в конце цикла:

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

Как я могу нажать их в std :: vector или std :: list? Все примеры, которые я видел, требуют знания размера массива заранее.

  • 0
    int arr1[][] вас есть int arr1[][] , тип arr1 - просто int **. Попробуйте вставить это в шаблон списка.
  • 0
    C ++ еще не поддерживает массивы в стиле C переменной длины. Если ваш размер массива известен только во время выполнения, рассмотрите возможность использования вектора.
Показать ещё 1 комментарий
Теги:
list
templates
stdvector
std

2 ответа

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;
  • 0
    О, парень ! Так что другого простого пути нет?
  • 0
    @chickenpox Я думаю, это довольно просто. Если у вас есть приличный класс 2D-массива, вы можете использовать его везде.
Показать ещё 1 комментарий
0

Для объявления массива 2d вы можете использовать карты

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню