Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
150 / 73 / 27
Регистрация: 09.04.2010
Сообщений: 297
1

Как увеличить размер дин. массива средствами С++

19.04.2011, 22:22. Показов 1726. Ответов 1
Метки нет (Все метки)

Привет всем!!!
Подскажите плз, как увеличить размер (т.е добавить один элемент в конец) динамического массива средствами С++. (new и delete)

Пример:
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <process.h>
#include <new.h>
 
using std::cout;
 
class Sample
{
public:
    Sample(int _a = 0) : a(_a) {}
    ~Sample() {}
private:
    int a;
    friend std::ostream &operator<< (std::ostream &stream, Sample &obj);
};
 
std::ostream &operator<< (std::ostream &stream, Sample &obj)
{
    stream << obj.a;
    return stream;
}
 
 
int main()
{
    int  n = 2;
    Sample *p = new Sample[n];
    p[0] = Sample(1);
    p[1] = Sample(2);
 
    for (int i = 0; i < n ; i++)
        cout << p[i] << '\n';
 
    ++n;
 
    //realloc(p, n*sizeof(Sample));   // вызывает ошибкупосле запуска на стадии работы (проблемы с кучей)
 
    // вместо realloc придумал следующее шаманство 
    Sample *temp = new Sample[n];
    for (int i = 0; i < n-1 ; i++)
        temp[i] = p[i];
 
    temp[n-1] = Sample(3);
    delete [] p;
 
    p = temp;
    /////////////////////////////////////////////////////////////
 
    for (int i = 0; i < n ; i++)
        cout << p[i] << '\n';
    
    delete [] p;
    system("pause");
 
}
Это можно решить с помощью malloc() и free() и realloc() заработает, но я так не хочу.

По поводу моей придумки с выделением еще одного блока памяти на единицу большего размера, думаю так не покатит, ибо если первый массив состоит из нескольких Гб то никто не будет выделять еще столько же памяти для добавления одного элемента в массив.

Посоветуйте стонибуть
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2011, 22:22
Ответы с готовыми решениями:

Как увеличить максимальный размер массива?
Вопрос. Как увеличить максимальный размер массива? Команда типа DIM Y(16383) еще понимается в QB,...

Как динамически увеличить размер массива?
К примеру, задаю массивint Array;читаю данные с устройства и получается так, что данных пришло...

Как увеличить размер массива до заданной длины заданным значением?
Как увеличить размер массива до заданной длины заданным значением?

Удаление элемента из дин. массива дин. массивов.
Есть динамический массив динамических массивов. Когда я удаляю элемент с этого массива, то с...

1
Эксперт С++
5046 / 3107 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
19.04.2011, 22:39 2
Только копированием и переназначением указателей. Пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void my_realloc(int *&old_arr, size_t old_size)
{
    int *new_arr = new int [old_size + 1];
 
    for (size_t i = 0; i < old_size; ++i)
        new_arr[i] = old_arr[i];
 
    new_arr[old_size] = 0;
 
    delete [] old_arr;
 
    old_arr = new_arr;
}
Добавлено через 1 минуту
А вообще обычная практика: при каждой необходимости перевыделить память выделяется не на один (2, 3 или сколько там актуально на данный момент) элемент больше, а в два раза больше памяти, чем при предыдущем выделении.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2011, 22:39

Как можно увеличить размер массива на 1, чтобы добавилась еще одна строка снизу
дан двумерный массив, где i - индекс столбца, j - индекс строки. Как можно увеличить размер массива...

Как в IntelliJ IDEA увеличить размер (размер редактора, кода)?
как в IntelliJ IDEA увеличит размер (размер редактора, кода)?

Увеличить размер массива
Приветствую всех. В программе создается массив байт определенного размера. В этот массив заносятся...

Увеличить размер массива до n+m и дозаполнить его
Создать массив размером n. Заполнить его целыми числами. После чего увеличить размер массива до n+m...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru