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

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

Войти
Регистрация
Восстановить пароль
 
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
#1

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

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

Здравствуйте!
Меня интересует один вопрос: можно ли в динамический массив добавлять размерность, или это делается путём копирования старого массива в новый?
Т.е. вот, допустим в динамическом массиве я сделал так, что выделил 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2013, 20:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Новый элемент в динамический массив (C++):

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

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

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

В новый динамический массив выписать все элементы массива, которые делятся на заданное число - C++
Помоготи с простенькой задачей: Дан массив произвольных чисел необходимо в новый динамический массив выписать все элементы, которые...

Вставить элемент в динамический массив - C++
Дан одномерный массив целых чисел, заполненный случайным образом числами из промежутка . Вставить элемент #include &lt;iostream&gt; //...

Включить новый элемент в массив, упорядоченный по возрастанию, с сохранением упорядоченности. (рандомный массив) - C++
1) Включить новый элемент в массив, упорядоченный по возрастанию, с сохранением упорядоченности. (рандомный массив)

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 555
13.10.2013, 20:49 #2
да все делается путем создания нового массива с увеличеным размером и копирования элементов со старого
0
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");
 
}
0
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
13.10.2013, 20:50  [ТС] #4
Hoottie_McGOOB, я бы его только и использовал, если бы не одно но:
нужно использовать именно С, а не С++, а вектора-это уже из С++(как преподаватель говорит), так что, увы, нельзя...
0
Hoottie_McGOOB
107 / 105 / 5
Регистрация: 04.10.2013
Сообщений: 231
13.10.2013, 20:52 #5
нет так нет)
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
13.10.2013, 20:53 #6
В Си есть функция realloc() - позволяющая изменить размер массива не удаляя его.
0
Jack Wade
63 / 36 / 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;
}
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 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;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2013, 22:51
Привет! Вот еще темы с ответами:

Дан массив А(n). Создать новый массив, элементами которого являются произведение A(i) на максимальный элемент массива A. - C++
Дан массив А(n). Создать новый массив, элементами которого являются произведение A(i) на максимальный элемент массива A. Элементы массива...

Как вставить элемент в динамический массив? - C++
Подскажите, как нормально реализовать функцию для вставки элемента в динамический массив? Ибо у меня элемент вставляется, но выводится...

Как в динамический массив вставить элемент? - C++
Задание: Дан массив целых чисел размера n. Вставить в массив заданное число перед последним отрицательным элементом ...

Как добавить элемент в динамический массив? - C++
Всем привет. У меня такая проблема: Написал класс avto, в нем данные об автомобиле.Моя задача создать массив таких классов изначально...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.10.2013, 22:51
Ответ Создать тему
Опции темы

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