Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
qwertyk
Сообщений: n/a
#1

Создание массива при работе программы - C++

26.11.2008, 00:59. Просмотров 1363. Ответов 13
Метки нет (Все метки)

Суть такова при работе программы я получу 2 числа (M и N), заранее я их не знаю. Мне надо создать двумерный массив (если это возможно) размером именно M на N.
Если создать именно массив невозможно подскажите какую либо другую структуру, которая позволит это сделать.
Предложение сделать массив заранее (к примеру 100 на 100) не интересно, с ним потом будет трудно работать.

+ желательно учесть то что потом мне надо будет отдельные строки этого массива и возможно сам массив передавать в функции, копировать, изменять...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
StarWorm
17 / 16 / 4
Регистрация: 20.11.2008
Сообщений: 81
26.11.2008, 01:12     Создание массива при работе программы #2
Создать массив динамически:
Код
int** arr=new int*[M];
for(iny i=0;i<M;i++)
   arr[i]=new int[N];
...
...
for(iny i=0;i<M;i++)
   delete [] arr[i];
delete [] arr;
Примерно вот так...
Alirp
55 / 50 / 1
Регистрация: 04.05.2008
Сообщений: 273
26.11.2008, 08:52     Создание массива при работе программы #3
Можно и не динамический, просто объявление массива писать после ввода переменных, примерно так:
Код
int M, N;
cout << "Введите значение числа M:"
cin >> M;
cout << "Введите значение числа N:"
cin >> N;
int mas [M][N];
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,365
26.11.2008, 10:12     Создание массива при работе программы #4
Хм, это вообще не скомпилируется.
Alirp
55 / 50 / 1
Регистрация: 04.05.2008
Сообщений: 273
26.11.2008, 10:33     Создание массива при работе программы #5
Цитата Сообщение от CheshireCat Посмотреть сообщение
Хм, это вообще не скомпилируется.
Всё отлично компилируется и без единого варнинга, если не веришь проверь сам.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,365
26.11.2008, 12:40     Создание массива при работе программы #6
Согласен, я был не прав. Следующий вопрос: хорошо, скомпилировалось... и как это будет работать, как ты думаешь?
Alirp
55 / 50 / 1
Регистрация: 04.05.2008
Сообщений: 273
26.11.2008, 12:55     Создание массива при работе программы #7
Цитата Сообщение от CheshireCat Посмотреть сообщение
Согласен, я был не прав. Следующий вопрос: хорошо, скомпилировалось... и как это будет работать, как ты думаешь?
Работать все будет правильно, сначала с помощью ввода задаются значения переменных, а затем обявляется двумерный массив с известным размером, вот если бы я сначала обявил массив, а затем задал значения переменных N и M, тогда бы да, согласен работало не корректно.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,365
26.11.2008, 13:03     Создание массива при работе программы #8
Поправочка:
Это НЕ ДОЛЖНО скомпилироваться, поскольку противоречит Стандарту, 8.3.4/1. Если некоторые компиляторы и допускают такие вольности, то это не есть правильно.

А правильный компилятор (C++, но не С99!) должен сказать:
>: error C2057: expected constant expression

А поскольку твой код оперирует с потоковым вводом (cin), то это именно C++, не так ли?
Alirp
55 / 50 / 1
Регистрация: 04.05.2008
Сообщений: 273
26.11.2008, 14:15     Создание массива при работе программы #9
Цитата Сообщение от CheshireCat Посмотреть сообщение
Это НЕ ДОЛЖНО скомпилироваться, поскольку противоречит Стандарту, 8.3.4/1. Если некоторые компиляторы и допускают такие вольности, то это не есть правильно.
Я таких компиляторов, в которых это не работает не встречал, и ничего не правильного я здесь не вижу.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,365
26.11.2008, 14:23     Создание массива при работе программы #10
А я, к сожалению, встречал... Поэтому и приходится на работе - писать переносимый код.
Например, GCC 4.3 - с установками по умолчанию спокойно "проглатывает" этот код; но такое поведение специально оговорено как C Language Extensions в его Complete Guide. Если же потребовать -pedantic (т.е. точное соответствие Стандартам), то он тоже откажется компилировать это.
А вот MSVC++ 8 (2005) сразу ругается и отказывается компилировать.
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
26.11.2008, 17:54     Создание массива при работе программы #11
Вообще-то да, динамику надо создавать с помощью new. И к слову, динамически объявить двухмерный массив нельзя.
Matskoff-Lion
4 / 4 / 0
Регистрация: 25.11.2008
Сообщений: 41
26.11.2008, 18:58     Создание массива при работе программы #12
Можно создать массив одномерный MxN, а доступ к элементам получать не через указатели на срезы, а как делает паскаль например: путем арифметического высчитывания индекса

А вот с Alirp'ом я в корне не согласен: такое компилиоваться не должно. Это противоречит стандартам С++, в объявлении массива (в памяти стат. объектов) должны быть значения известные на момент компиляции, чтобы компилятор выделил необходимую память.
qwertyk
Сообщений: n/a
27.11.2008, 16:50     Создание массива при работе программы #13
StarWorm,Matskoff-Lion, Spo1ler
Спасибо большое! У меня нет слов кроме слова круто =).
Alirp, к сожалению это у меня тоже не катит, иначе бы я не создал тему.

Добавлено через 14 часов 27 минут 21 секунду
StarWorm, спасибо за отрывок кода но возникает вопрос:
Что значит буквосочетание iny в строке кода
Код
for(iny i=0;i<M;i++)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2008, 19:31     Создание массива при работе программы
Еще ссылки по теме:
C++ как сделать так, чтоб при работе программы можно было вводить в качестве данных русские слова?
"Разделение" процессов при работе программы C++
C++ Создание двумерного динамического массива (вылет из программы)
Создание программы для сортировки случайного массива чисел C++
C++ Ошибка "неверный тип для индекса массива" при работе с двумерным массивом

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Matskoff-Lion
4 / 4 / 0
Регистрация: 25.11.2008
Сообщений: 41
27.11.2008, 19:31     Создание массива при работе программы #14
Что значит буквосочетание iny
это опечатки. предполагалось int.
T и Y рядом находятся
Yandex
Объявления
27.11.2008, 19:31     Создание массива при работе программы
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru