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

Массив заранее неизвестного размера - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 68, средняя оценка - 4.76
REALIST07
Автор FAQ
Автор FAQ
 Аватар для REALIST07
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
22.09.2010, 23:27     Массив заранее неизвестного размера #1
Возможно сейчас произвучит тупой вопрос,не судите строго,но можно каким-нибудь образом сделать чтобы размер массива задавался пользователем?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mrMRak
38 / 38 / 3
Регистрация: 02.06.2010
Сообщений: 105
22.09.2010, 23:29     Массив заранее неизвестного размера #2
угу, динамическое выделение памяти.. погуглите по этому вопросу =)
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
22.09.2010, 23:30     Массив заранее неизвестного размера #3
Вы ето имели введу ?
C++
1
2
3
4
5
int*Arr;
int n=0;
std::cout<<"Enter n: ";
std::cin>>n;
Arr=new int[n];
mrMRak
38 / 38 / 3
Регистрация: 02.06.2010
Сообщений: 105
22.09.2010, 23:32     Массив заранее неизвестного размера #4
и удалить в конце программы

C++
1
delete [] Arr;
REALIST07
Автор FAQ
Автор FAQ
 Аватар для REALIST07
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
22.09.2010, 23:35  [ТС]     Массив заранее неизвестного размера #5
Возможно сейчас прозвучит второй тупой вопрос,но это что?объясните,со слов людей лучше доходит
mrMRak
38 / 38 / 3
Регистрация: 02.06.2010
Сообщений: 105
22.09.2010, 23:39     Массив заранее неизвестного размера #6
C++
1
2
3
4
5
6
7
8
int*Arr;            //создаем указатель на число   типа инт
int n=0;           //создаем число - размер массива
std::cout<<"Enter n: ";
std::cin>>n;
Arr=new int[n];    //выделям сырую память   под  массив Интовых чисел длиной в N, 
//где Arr - указатель на 1ый элемент. 
/*код вашей программы*/
delete [] Arr;     //удаляем выделенную память, так как сама она не очищается.
suv121
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
22.09.2010, 23:42     Массив заранее неизвестного размера #7
а как выделить память под массив , когда пользователь сам не знает какой длины будет массив??
mrMRak
38 / 38 / 3
Регистрация: 02.06.2010
Сообщений: 105
22.09.2010, 23:45     Массив заранее неизвестного размера #8
а кто знает?) или юзайте стл - векторы, их ресайзить можно.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
22.09.2010, 23:46     Массив заранее неизвестного размера #9
Если не знаеш какой размер масива,юзай вектора.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
22.09.2010, 23:53     Массив заранее неизвестного размера #10
Цитата Сообщение от REALIST07 Посмотреть сообщение
Возможно сейчас прозвучит второй тупой вопрос,но это что?
Обратитесь к литературе, а именно к теме посвященной динамической памяти. Спрашивая на форумах, Вы мало чего поймете.
suv121
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
23.09.2010, 00:00     Массив заранее неизвестного размера #11
а можно какой нибудь пример с вектором
mrMRak
38 / 38 / 3
Регистрация: 02.06.2010
Сообщений: 105
23.09.2010, 00:01     Массив заранее неизвестного размера #12
http://www.cplusplus.com/reference/stl/vector/
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
23.09.2010, 00:01     Массив заранее неизвестного размера #13
suv121, конкретный пример здесь.
J.A.B.
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 14
26.12.2013, 08:56     Массив заранее неизвестного размера #14
Сразу прошу прощения за некропост, однако гугл даёт сюда первую ссылку, поэтому решил поделится - может кому-то пригодится в будущем.
Столкнулся с похожей проблемой, что и ТС.
Есть ещё один способ без использоания вектора, да и по сути, это не динамический массив.
Насколько я понял, ругается компиллятор на точ, что не знает сколько памяти выделить, и не может зависеть от переменной. однако, компиллируется "сверху вниз" и, например, из функции приходит уже известное значение - не переменая. возможно мыслю не совсем верно, однако код работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**В массиве М[N] записаны оклады работников предприятия. Вывести на экран средний оклад по предприятию и номера тех работников, чьи оклады ниже среднего.*/
#include <iostream>
#include <windows.h>
using namespace std;
 
int arrsize(int j)
{
    return j;
}
 
int main()
{
    setlocale(LC_ALL, "russian");
    int i = 0, j, k = 0;
 
    double sum = 0, ave;
    cout << "Введите кол-во работников" << endl;
    cin >> j;
    const int n = arrsize(j);
    double m[n];// = {0};
    cout << "Вводите заработные платы сотрудников поочерёдно" << endl;
    for (i; i <= n-1; i++)
    {
        cin >> m[i];
        sum = sum + m[i];
    }
    ave = sum/n;
 
    cout << "Средний оклад по предприятию равен "<< ave << endl
         << "Номера работников, получающих меньше средней з/п: " << endl;
    for (k; k <= n-1; k++)
    {
        if(m[k] < ave) cout << k << endl;
    }
    system ("pause");
    return 0;
}
PS если в 20 строке присвоить значение - вывалится в ошибку
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
26.12.2013, 09:38     Массив заранее неизвестного размера #15
Цитата Сообщение от J.A.B. Посмотреть сообщение
Есть ещё один способ без использоания вектора, да и по сути, это не динамический массив.
Это нестандартное расширение.
Если компилируете с помощью MinGW, то просто поставьте ключ -pedantic и Вам скажут что нельзя так делать по стандарту
J.A.B.
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 14
26.12.2013, 10:00     Массив заранее неизвестного размера #16
Цитата Сообщение от Croessmah Посмотреть сообщение
расширение.
расширение? простите, не очень вас понял
насчёт -pedantic - как я понимаю, в linker settings? если да - ошибок не выдал. codeblocks 12.11
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
26.12.2013, 10:09     Массив заранее неизвестного размера #17
Цитата Сообщение от J.A.B. Посмотреть сообщение
насчёт -pedantic - как я понимаю, в linker settings?
причем тут линкер вообще?
Массив заранее неизвестного размера

Цитата Сообщение от J.A.B. Посмотреть сообщение
расширение? простите, не очень вас понял
А что тут понимать? Производители компиляторов добавляют в свои расширения языка, которые являются не стандартными и скорее всего не поддерживаются другими компиляторами
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,334
Завершенные тесты: 1
26.12.2013, 10:20     Массив заранее неизвестного размера #18
Цитата Сообщение от J.A.B. Посмотреть сообщение
расширение?
Диалект, наречие.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2013, 10:24     Массив заранее неизвестного размера
Еще ссылки по теме:

Функция с переменным числом параметров заранее неизвестного типа C++
Ввод и вывод строки неизвестного размера C++
C++ Массив неизвестного размера

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

Или воспользуйтесь поиском по форуму:
J.A.B.
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 14
26.12.2013, 10:24     Массив заранее неизвестного размера #19
Цитата Сообщение от Croessmah Посмотреть сообщение
А что тут понимать? Производители компиляторов добавляют в свои расширения языка, которые являются не стандартными и скорее всего не поддерживаются другими компиляторами
понял вас. да, пожалуй вы правы. с педантиком действительно ошибка.
я не спорю - способ действительно кривоват, но ведь работает пусть даже и только под mingw
Yandex
Объявления
26.12.2013, 10:24     Массив заранее неизвестного размера
Ответ Создать тему
Опции темы

Текущее время: 06:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru