Duke Shadow

Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору KADABRA Цитата: Но я так и не понял ПОЧЕМУ? | Ограничение такое. Общий смысл таков: нельзя создать массив из элементов, чья размерность заранее неизвестна. В С++ многомерный массив рассматривается как массив массивов, т.е. "вторая" и последующие размерности задают, фактически, размер элемента для массива "первой" размерности. Написать компилятор для эффективного решения данной задачи, имхо, очень трудно, поэтому задача переложена на программиста, тем более, что в конкретной ситуации ему виднее. distance Ну кто же так на "плюсах" пишет? Какой, нафик, malloc? new нужно пользовать. Короче, варианта два: Вариант 1 Код: unsigned int N=<значение>; unsigned int M=<значение>; <тип> *array = new <тип>[N*M]; //Обращение к элементу массива выглядит так array[i*M+j]=<что-то_подходящего_типа>; //где i - индекс строки, j - индекс столбца //Не забываем освобождать память delete [] array; | Вариант 2 Код: unsigned int N=<значение>; unsigned int M=<значение>; <тип> **array = new <тип>*[N]; for(int i=0;i<N;i++) array[i] = new <тип>[M]; //Обращение к элементу массива выглядит так array[i][j]=<что-то_подходящего_типа>; //где i - индекс строки, j - индекс столбца //Не забываем удалять ВСЕ выделенные массивы for(int i=0;i<N;i++) delete [] array[i]; delete [] array; | Когда спрашивают в чём разница обычно отвечаю, что первый вариант сложнее в использовании массива (надо формулу считать), но проще и эффективнее в создании. Второй - проще в использовании, но в момент выделения памяти и времени тратиться больше и накладные расходы на поддержание всех дополнительных структур данных выше.
---------- Тот, кто умеет - делает, кто не умеет - учит(с)Б. Шоу Войны никого не могут сделать великим(с)магистр Йода Аватар(c)MindDiver |
|