Как создать массив массивов неравной длины? - PullRequest
0 голосов
/ 05 января 2010

Мне нужно создать своего рода двумерный массив, в котором каждый из вторичных массивов имеет разную длину. У меня есть одномерный массив известной длины (который определяет количество формируемых массивов), причем каждый элемент имеет номер, который обозначает длину вторичного массива в этой позиции.

Каждый из этих массивов довольно большой, поэтому я не хочу создавать «поддельный» двумерный массив кучи «один размер для всех», чтобы охватить все.

Как бы я поступил так? Любой 2D-массив, который я сделал ранее, всегда прямоугольный.

Я пытаюсь сделать это, чтобы я мог создать некоторый код для динамического создания потоков, чтобы разделить некоторую рабочую нагрузку.

Спасибо,

-Faken

Ответы [ 4 ]

2 голосов
/ 05 января 2010

Вы можете сделать что-то вроде следующего:

int **array = new int*[3];
array[0] = new int[5];
array[1] = new int[2];
array[2] = new int[11];

Не забудьте правильно освободить место после того, как вы покончили с использованием array.

РЕДАКТИРОВАТЬ:

Вы можете поместить вторичную инициализацию указателя в цикл следующим образом:

int cells[] = {5,2,11};
int **array = new int*[3];
for (int i = 0; i < 3; i++){
  array[i] = new int[cells[i]];
}

PS: Лично я предпочитаю использовать Boost.MultiArray , когда мне нужны многомерные массивы. Возможно, вы захотите взглянуть на это.

2 голосов
/ 05 января 2010

Используйте std :: vector из std :: vectors - для целых чисел:

#include <vector>
std::vector <std::vector <int> > v2d;
0 голосов
/ 05 января 2010

Или, если вы больше думаете о C (есть миллионы людей, которые пишут код на C, но компилируют его с C ++, это в основном работает):

Объявить не двумерный массив: int arr[rows][cols]

, но одномерный массив указателей на массивы: int (arr*)[rows]

Не совсем уверен насчет этого синтаксиса, кто-то поправит меня, если я ошибаюсь, пожалуйста!

0 голосов
/ 05 января 2010

Здесь может быть полезен какой-то разреженный массив. этот вопрос при переполнении стека или этот сайт .

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...