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

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

Войти
Регистрация
Восстановить пароль
 
FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
#1

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

19.04.2011, 22:22. Просмотров 945. Ответов 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++
Здравствуйте интересует один вопрос, есть простенькая программа не важно какая, имеющая размер 6мб, как или с помощью чего можно увеличить...

Как увеличить размер стека? - C++
Есть быстрая сортировка - но выдает ошибку Stack overflow на массиве 100,7 Но работает на 100-4-0-1-2-3 В чем проблема, подскажите...

Как увеличить размер консольного окна - C++
Хочу увеличить ширину консольного окна но не пойму как это можно сделать к примеру для того чтобы поменять цвет шрифта в консоли...

Добавление и удаление элементов дин массива - C++
Задание: Создать класс «машина», имеющая марку, число цилиндров, мощность и цену. Определить конструктор и функцию печати. Создать...

Создание дин массива для структуры - C++
программа для создания студентов и записывания их данных (фамилия оценка группа). структура: struct stud{ int qty; char...

Непонятная ошибка при инициализации дин. массива - C++
Вылетает на memset'е с ошибкой записи. Что неправильно? int i = 0; int j = 0; int k = 0; BYTE ***Bitmap = (BYTE...

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

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

Увеличить указатель на размер адресуемой структуры - C++
помогите пожалуйта решить пару задач, задачи не сложные, но я не могу в них разобраться Проиллюстрировать возможности аддитивных...

Увеличить указатель на размер адресуемой им структуры - C++
Увеличить указатель на размер адресуемой им структуры. Буду очень признателен за помощь.

Крашится программа при попытке присваивания значения элементу дин-го массива - C++
Не могу понять в чём ошибка. Я только учусь, поэтому возможно, что ошибка элементарная. Вот шаблон класса множество. Хотел написать...

Как увеличить элемент массива на единицу? - C++
Задача такова, программа выводит сообщение, нужно подсчитать количество этих сообщений, занисти в определенный элемент массива, как это...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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 или сколько там актуально на данный момент) элемент больше, а в два раза больше памяти, чем при предыдущем выделении.
Ответ Создать тему
Опции темы

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