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

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

Восстановить пароль Регистрация
 
Jack Wade
61 / 34 / 6
Регистрация: 24.02.2013
Сообщений: 250
13.10.2013, 20:42     Новый элемент в динамический массив #1
Здравствуйте!
Меня интересует один вопрос: можно ли в динамический массив добавлять размерность, или это делается путём копирования старого массива в новый?
Т.е. вот, допустим в динамическом массиве я сделал так, что выделил 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2013, 20:42     Новый элемент в динамический массив
Посмотрите здесь:

C++ Как добавить элемент в динамический массив?
В новый динамический массив выписать все элементы массива, которые делятся на заданное число C++
C++ Двумерные массивы. Найти новый одномерный массив, максимальный элемент, заменить третий элемент
C++ Дан массив А(n). Создать новый массив, элементами которого являются произведение A(i) на максимальный элемент массива A.
C++ Включить новый элемент в массив, упорядоченный по возрастанию, с сохранением упорядоченности. (рандомный массив)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newb_programmer
 Аватар для newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 553
13.10.2013, 20:49     Новый элемент в динамический массив #2
да все делается путем создания нового массива с увеличеным размером и копирования элементов со старого
Hoottie_McGOOB
107 / 105 / 5
Регистрация: 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");
 
}
Jack Wade
61 / 34 / 6
Регистрация: 24.02.2013
Сообщений: 250
13.10.2013, 20:50  [ТС]     Новый элемент в динамический массив #4
Hoottie_McGOOB, я бы его только и использовал, если бы не одно но:
нужно использовать именно С, а не С++, а вектора-это уже из С++(как преподаватель говорит), так что, увы, нельзя...
Hoottie_McGOOB
107 / 105 / 5
Регистрация: 04.10.2013
Сообщений: 231
13.10.2013, 20:52     Новый элемент в динамический массив #5
нет так нет)
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
13.10.2013, 20:53     Новый элемент в динамический массив #6
В Си есть функция realloc() - позволяющая изменить размер массива не удаляя его.
Jack Wade
61 / 34 / 6
Регистрация: 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2013, 22:51     Новый элемент в динамический массив
Еще ссылки по теме:

C++ Создать новый массив, найти наименьший элемент 3-го столбца, поменять местами наименьший элемент 3-го столбца и элемент a23
C++ Как передвигать указатель чтобы выделить память под новый элемент и добавить новый элемент в массив?
Вставить элемент в динамический массив C++

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
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;
}
Yandex
Объявления
13.10.2013, 22:51     Новый элемент в динамический массив
Ответ Создать тему
Опции темы

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