Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Ratnikov Alex Гость
|
Добавлено: Вт Янв 21 2003 15:00 Заголовок сообщения: Как описать массив переменной размерности в C++? |
|
|
Буду очень благодарен за любую информацию о том как описать массив переменной размерности в C++.Чтобы смысл был таков например: int ArrayName[int..], а не int ArrayName[const int..].Заранее спасибо. ratnikov@smk.ru |
|
Вернуться к началу |
|
|
Adil Гость
|
Добавлено: Вт Янв 21 2003 16:12 Заголовок сообщения: Re: Как описать массив переменной размерности в C++? |
|
|
Для этого надо использовать указатели и динамическое выделение памяти. Ех: int *arr; int b;
b=20; arr=new int[b];//можно arr=(int*)malloc(b*sizeof(int)); в стиле Си. //максимальное значение b зависит нескольких //причин: ОС, модели памяти программы для //ДОС и т.д. if(arr==NULL) ;//ошибка выделения памяти
for(int i=0;i |
|
Вернуться к началу |
|
|
Vector Гость
|
Добавлено: Ср Янв 22 2003 15:32 Заголовок сообщения: Re: Как описать массив переменной размерности в C++? |
|
|
А почему бы не использовать библиотеку STL стандартное vector и никаких проблем |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Ср Янв 22 2003 18:25 Заголовок сообщения: Вопрос слишком общий. Важно знать, ради каких действий (методов ) нужны массивы переменной размерности. Просветил бы... Хотя то |
|
|
- |
|
Вернуться к началу |
|
|
Y Гость
|
Добавлено: Чт Янв 23 2003 15:14 Заголовок сообщения: Всё просто! |
|
|
Делается это очень просто! 1) Вам необходимо объявить указатель на массив. int *m; 2) Теперь выделяем под него память m = new int[4]; 3) Работаем ...... m[2] = 3; ...... 4) Удаляем delete[] m; Для многомерных массивов идея та же, только выделять память надо под каждый столбец массива: int **m;//обратите внимание, как я объявил указатель m = new int*[4]; //выделили место под указатели столбцов for(int i=0; i |
|
Вернуться к началу |
|
|
Y Гость
|
Добавлено: Чт Янв 23 2003 15:16 Заголовок сообщения: ...Продолжаю.. |
|
|
for(int i=0; i |
|
Вернуться к началу |
|
|
Y Гость
|
Добавлено: Чт Янв 23 2003 15:17 Заголовок сообщения: Ещё..Продолжаю.. (грёбаный форум!) |
|
|
for(int i=0; i |
|
Вернуться к началу |
|
|
Y Гость
|
Добавлено: Чт Янв 23 2003 15:22 Заголовок сообщения: Продолжить не удалось.. :-((( |
|
|
мдя... ну бля и форум... |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Чт Янв 23 2003 19:40 Заголовок сообщения: Я бы не сказал, что "Всё просто!", так как, по-видимому, важно при изменении размерности массива сохранять его значен |
|
|
А в твоем случае любой delete[] потеряет старые значения.
Кстати, в твоем случае вместо int **m = new int*[4]; //выделили место под указатели столбцов for(int i=0; i < 4; i++) { m[i] = new int[10];// выделили место под столбец (10 -- количество строк) }
можно использовать:
int *m[4]; m[0] = new int[40]; //выделили место под элементы (4x10 -- 4 столбца по 10 строк) for(int i=1; i < 4; i++) { m[i] = m[i-1]+10; }
Это быстрее работает. |
|
Вернуться к началу |
|
|
Александр
Зарегистрирован: 07.10.2003 Сообщения: 276
|
Добавлено: Сб Янв 25 2003 11:33 Заголовок сообщения: Re: Я бы не сказал, что "Всё просто!", так как, по-видимому, важно при изменении размерности массива сохранять его зн |
|
|
посмотри в MSDN ключевое слово new и ссылки.Там показано использование многомерных массивов переменного размера. Тогда будет действительно просто. Не забудь про delete[]. |
|
Вернуться к началу |
|
|
|