Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
68 / 41 / 14
Регистрация: 24.02.2013
Сообщений: 250
1

Новый элемент в динамический массив

13.10.2013, 20:42. Показов 1605. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Меня интересует один вопрос: можно ли в динамический массив добавлять размерность, или это делается путём копирования старого массива в новый?
Т.е. вот, допустим в динамическом массиве я сделал так, что выделил 100 элементов под него, и, допустим, я заполнил все 100 элементов данного массива, и я хочу добавить новый элемент, 101-й.
Как вариант-создать второй динамический массив с увеличенной размерность, как у старого массива, только +1(т.к. добавляем 1 элемент), потом занести значения из 1-го дин. массива в 2-й дин. массив, после чего, очистить 1-й динам. массив, и просто выделить память для 1-го дин. массива, как размерность 2-го, занести туда всё из 2-го, и в конце-очистить 2-й дин. массив.
В итоге-получим увеличенный дин. массив, размерность которого теперь 101 элемент.
Но это слишком долго...
Меня интересует-есть ли более простой способ занести новый элемент в дин. массив, или, остаётся только лишь такой вариант?

Добавлено через 8 минут
Пример добавления нового эл-та в дин. массив(с изменением его размерности):
Кликните здесь для просмотра всего текста

По логике-должно быть так...
Просто, на данный момент-не имею возможности проверить правильность кода...
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
int* mas;
int* back_up;
int mas_size;
 
int main(void)
{
mas_size=5;//Допустим, у нас на данный момент 5 элементов...
mas=new int[mas_size];
...
{
back_up=new int[mas_size+1];//Выделяем память для массива-копии
for (int i=0; i<mas_size; i++)
back_up[i]=mas[i];
//Теперь, мы, как бы, вводим данные в back_up[mas_size];//т.е. в 6-й элемент, т.к. back_up[5], и счёт начинается с нуля
delete mas;
mas=new int[mas_size+1];
for (int i=0; i<mas_size+1; i++)
mas[i]=back_up[i];
mas_size++;
delete back_up;
}
...
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2013, 20:42
Ответы с готовыми решениями:

Не могу добавить последний элемент в новый динамический массив
Доброго времени суток,мне нужно проверить массив parray1 и записать в parraytemp элементы первого...

Как передвигать указатель чтобы выделить память под новый элемент и добавить новый элемент в массив?
Допустим есть некое условие,нам нужно при каждом его выполнении выделить память под новый элемент и...

Дан динамический массив.Нужно удалить из него все простые числа и добавить оставшееся в новый массив
Доброго времени суток,не могу понять, где моя ошибка, помогите пожалуйста. Полный текст...

Массив: передать динамический массив в функцию и записать в каждый элемент строку из файла
задача: передать динамический массив в функцию, и записать в каждый элемент строку из файла....

7
238 / 238 / 113
Регистрация: 03.09.2011
Сообщений: 558
13.10.2013, 20:49 2
да все делается путем создания нового массива с увеличеным размером и копирования элементов со старого
0
109 / 107 / 44
Регистрация: 04.10.2013
Сообщений: 231
13.10.2013, 20:49 3
попробуй vector
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<int>a;
    a.push_back(3);
    a.push_back(4);
 
    for(int i =0; i<a.size(); i++)
        cout<<a[i]<<endl;
 
    cout<<endl;
    a.pop_back();
    
 
    for(int i =0; i<a.size(); i++)
        cout<<a[i]<<endl;
    system("pause");
 
}
0
68 / 41 / 14
Регистрация: 24.02.2013
Сообщений: 250
13.10.2013, 20:50  [ТС] 4
Hoottie_McGOOB, я бы его только и использовал, если бы не одно но:
нужно использовать именно С, а не С++, а вектора-это уже из С++(как преподаватель говорит), так что, увы, нельзя...
0
109 / 107 / 44
Регистрация: 04.10.2013
Сообщений: 231
13.10.2013, 20:52 5
нет так нет)
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
13.10.2013, 20:53 6
В Си есть функция realloc() - позволяющая изменить размер массива не удаляя его.
0
68 / 41 / 14
Регистрация: 24.02.2013
Сообщений: 250
13.10.2013, 21:12  [ТС] 7
zss, попробовал-выдало ошибку:
"(C++) Изменение размера массива.exe вызвал срабатывание точки останова."
Код программы:
Кликните здесь для просмотра всего текста

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
38
39
40
#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleOutputCP(1251);
 
    int* mas=new int[1];
    int mas_size=0;
 
    char yn=NULL;
 
    while (toupper(yn)!='N')
    {
        printf("Добавить новый элемент в массив?\n");
        scanf("%c", &yn);
        system("cls");
        if (toupper(yn)!='N')
        {
            printf("Вы вводите [%3d]-й элемент\n", mas_size+1);
            scanf("%d", &mas[mas_size]);
 
            mas_size++;
            mas=(int*)realloc(mas, mas_size);//вроде бы, так должно быть...     
 
            system("cls");
 
            printf("На данный момент - ваш массив выглядит след. образом\n\n");
            for (int i=0; i<mas_size; i++) 
                printf("[%3d] = %3d\n", i+1, mas[i]);
            printf("Размерность массива = %3d\n", mas_size);
            _gettch();
            getchar();
            system("cls");
        }
    }
    delete mas;
    return 0;
}
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
13.10.2013, 22:51 8
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
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <locale.h>
#include <ctype.h>
int main()
{
    setlocale(LC_ALL,"Rus");
    int* mas=(int*)malloc(1*sizeof(int));
    int mas_size=0;
    char yn=NULL;
    do
    {
        printf("Добавить новый элемент в массив?\n");
        yn=_getche();
        if (toupper(yn)!='N')
        {
            mas_size++;
            mas=(int*)realloc(mas, mas_size*sizeof(int));    
            printf("Вы вводите [%3d]-й элемент:", mas_size);
            scanf("%d", &mas[mas_size-1]);
            printf("На данный момент - ваш массив выглядит след. образом\n\n");
            for (int i=0; i<mas_size; i++) 
                printf("[%3d] = %3d\n", i+1, mas[i]);
            printf("Размерность массива = %3d\n", mas_size);
            _getch();
        }
    }while (toupper(yn)!='N');
    free(mas);
    return 0;
}
1
13.10.2013, 22:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2013, 22:51
Помогаю со студенческими работами здесь

Двумерные массивы. Найти новый одномерный массив, максимальный элемент, заменить третий элемент
Помогите пожалуйста написать хотя бы одну из этих программ: Дана матрица А(5,5) 1.Найти новый...

Как добавить новый элемент в динамический массив
Вопрос есть ли такая функция которая добавляет в конец массива(динамического) новый элемент. К...

Дан массив C(N). Создать новый массив, заменив положительные элементы на максимальный элемент, отрицательные – на минимальный элемент, нулевые оставив
Помогите решить несколько задач по одномерным массивам 1.Дан массив C(N). Создать новый массив,...

В непустой динамический двусвязный список вставить новый элемент E1 перед первым вхождением элемента Е
нужно реализовать задачу на с# В непустой динамический двусвязный список вставить новый элемент E1...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru