Массив массивов со вставками - PullRequest
0 голосов
/ 26 октября 2011

Как бы вы сохранили двумерный массив целых как переменную класса?

Если вам нужен массив целых чисел, вы можете перейти:

Объявление класса

int * myInts;

Осуществление

int ints[3] = {1,2,3};
myInts = ints;

Но что, если вы хотите хранить массив массивов с целыми числами?

Как это:

 int ints[3][3] = {{1,2,3}, {1,2,3}, {1,2,3}};

Я не хочу ограничивать размер массивов в объявлении класса, поэтому я думаю, что мне нужно использовать указатели, но как?

Ответы [ 3 ]

1 голос
/ 26 октября 2011

Для дальнейшего использования, это мой вывод:

Объявление класса

 int ** ints;

Осуществление

 int rows = 2;
 int cols = 5;

 ints = (int**)malloc(rows*sizeof(int*));
 ints[0] = (int*)malloc(cols*sizeof(int));

 ints[0][0] = 123;
 ints[0][1] = 456;
 ints[0][2] = 789;
 // etc

Это моя собственная интерпретация ссылок, представленных в комментариях, и мои навыки C довольно низки, поэтому примите это во внимание;) Может быть, есть лучшие способы добавлять несколько чисел одновременно с {123,456,789} или чем-то, но это вне моих требований сейчас!

0 голосов
/ 26 октября 2011

Я написал образец для вас:

int N = 10, M = 15;
NSMutableArray *ints = [NSMutableArray arrayWithCapacity:N]; // array[N][M]
for (int i=0; i<N; i++)
{
    NSMutableArray *arr = [NSMutableArray arrayWithCapacity:M];
    for (int j=0; j<M; j++)
    {
        [arr addObject:[NSNumber numberWithInt:(i+1)*(j+1)]];
    }
    [ints addObject:arr];
}
// print
for (int i=0; i<[ints count]; i++)
{
    NSString *line = @"";
    NSMutableArray *arr = [ints objectAtIndex:i];
    for (int j=0; j<[arr count]; j++)
        line = [NSString stringWithFormat:@"%@ %@", line, [arr objectAtIndex:j]];
    NSLog(@"%@", line);
}
0 голосов
/ 26 октября 2011

Если вы хотите динамически распределять память, другими словами, определяйте размер массивов во время выполнения, тогда вам нужно объявить массив как указатель, распределить его по malloc, а затем добавить другой массив int для каждого индекса во время выполнения.Вы не можете действительно объявлять и динамически размещать на уровне класса.Если вы используете Cocoa / Iphone SDK, вы можете использовать NSMutableArray.

Вы также можете создать свой собственный класс, который создает двумерный массив и предоставляет методы для push и выталкивания объектов типа int, например [IntegerArray push: x, y, n];

Вот и пример использования двойной ссылки , как указал Даниэль Р. Хикс.

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