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

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

Восстановить пароль Регистрация
 
FireNovel
 Аватар для FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
19.04.2011, 22:22     Как увеличить размер дин. массива средствами С++ #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() заработает, но я так не хочу.

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

Посоветуйте стонибуть
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2011, 22:22     Как увеличить размер дин. массива средствами С++
Посмотрите здесь:

C++ Как увеличить размер консольного окна
C++ Непонятная ошибка при инициализации дин. массива
C++ Добавление и удаление элементов дин массива
Как увеличить размер стека? C++
C++ Как увеличить размерность массива?
Как увеличить размер программы? C++
Создание дин массива для структуры C++
Увеличить размер выводимого текста (увеличить буквы) функции outtextxy C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
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 или сколько там актуально на данный момент) элемент больше, а в два раза больше памяти, чем при предыдущем выделении.
Yandex
Объявления
19.04.2011, 22:39     Как увеличить размер дин. массива средствами С++
Ответ Создать тему
Опции темы

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