Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
dobmax
0 / 0 / 0
Регистрация: 15.12.2014
Сообщений: 31
1

Функция с применением динамического массива, чтобы размер массива увеличивался по мере необходимости

23.03.2015, 20:05. Просмотров 617. Ответов 4
Метки нет (Все метки)

Ребята, подскажите, кто может, каким образом создать функцию с применением динамического массива, но так, чтобы размер массива увеличивался по мере необходимости (ну условно +1, каждый раз, когда добавляем новую ячейку со значением).

У меня все получается, когда сам указываю размер, через динамическую память, но меня это не устраивает и сковывает, так сказать.

Ранее мне говорили, что надо создать временную переменную и тд и тп, но не разъяснили, вот мучаюсь...

В добавок у меня есть участок кода, но я его не пойму, разъясните кто может:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void add(int*& p, int& size, int x)
{
int* temp=new int [size+1]
 
for(int i=0; i<size,++i)
temp[i]=p[i];
 
temp[size]=x;
 
if(size>0) delete[]p;
 
p=temp;
++size;
}
Я знаю, что так оно и должно быть, но я обратился к вам, чтобы вы мне объяснили, почему именно так и не как иначе. Я много чего перерыв, но так и намека на это нет.
За ранее спасибо Всем!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2015, 20:05
Ответы с готовыми решениями:

Нужно сделать, чтобы программа состояла из 3 функций, тоесть 1-ая функция ввода массива, 2-ая основная функция, 3-я- вывод массива
Есть программа #include &lt;iostream&gt; #include &lt;algorithm&gt; const int N = 5;...

Размер динамического массива
Здравствуйте. Есть такой код: #include &lt;iostream&gt; #include &lt;conio.h&gt;...

Размер динамического массива
Как узнать сколько заполненных елементов в динамическом массиве, если под него...

Размер динамического массива
Здравствуйте, есть ли какая функция, которая возвращает размер динамического...

Функция, которая удаляет из целочисленного одномерного массива все, и возвращает новый размер массива
Разработать и испытать функцию, которая удаляет из целочисленного одномерного...

4
zss
Модератор
Эксперт С++
7485 / 6852 / 4326
Регистрация: 18.12.2011
Сообщений: 18,128
Завершенные тесты: 1
23.03.2015, 22:04 2
C++
1
2
3
4
5
6
7
8
9
10
11
void add(int*& p, int& size, int x) 
// p передаем по ссылке, чтобы она была синонимом указателя на массив из вызывающей функции
{
    int* temp=new int[size+1]; // создали массив на 1больший
    for(int i=0; i<size;++i) // скопировали массив p
           temp[i]=p[i];
    temp[size]=x;   // в последний элемент записали x
    if(size>0) delete[]p;  // удалили старый массив
    p=temp; // заменили адрес массива на адрес созданного (факт. адрес реально меняется, т.к. передается по ссылке)
    ++size; //  значение фактического параметра реально меняется, т.к. size передается по ссылке
}
Пример вызова
C++
1
2
3
4
int a=new int[10];
for(int i=0;i<9;)
   add(a,i,7*i); // a фактический параметр соответствующий синониму p,т.е. p=temp реально делает a=temp
// у i синоним size, Т.е. ++size реально увеличивает ++i
1
dobmax
0 / 0 / 0
Регистрация: 15.12.2014
Сообщений: 31
23.03.2015, 22:55  [ТС] 3
А возможно создание такого динамического массива таким способом без прибегания к переменной темп?
И собственно, в чем смысл создания временной переменной, почему нельзя просто взять и создать без нее?
Спасибо!
0
zss
Модератор
Эксперт С++
7485 / 6852 / 4326
Регистрация: 18.12.2011
Сообщений: 18,128
Завершенные тесты: 1
24.03.2015, 06:52 4
Можете вообще отказаться от динамического выделения памяти,
а сразу создать статический массив достаточно большого размера
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void add(int* p, int& size,int size_max, int x) 
{
    if(size<size_max)
    {
       p[size]=x;   // в последний элемент записали x
       ++size; //  значение фактического параметра реально меняется, т.к. size передается по ссылке
    }
}
int main()
{
   const int N=10;
   int a[N];
   for(int i=0;i<N;)
       add(a,i,N,7*i);
}
Только смысл теряется, т.к. этот код эквивалентен такому
C++
1
2
3
4
5
6
7
int main()
{
   const int N=10;
   int a[N];
   for(int i=0;i<N;i++)
       a[i]=7*i;
}
0
dobmax
0 / 0 / 0
Регистрация: 15.12.2014
Сообщений: 31
24.03.2015, 16:50  [ТС] 5
Ну это понятно, но есть ли альтернатива выделения памяти под динамический массив, нежели представленная в коде который я изначально выложил. Я имею ввиду, как - то по другому написать. Не прибегая к переменной temp
0
24.03.2015, 16:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2015, 16:50

Изменить размер динамического массива
Дан класс, который описывает двумерный массив class matr{ private: int...

Задавать размер динамического массива
Программа работает но в этой программе размерность двумерного массива...

Узнать размер динамического массива
Здравствуйте. Пытаюсь сделать динамический массив и вывести его размерность....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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