Перейти к содержимому

Как увеличить динамический массив c

  • автор:

Увеличение динамического массива в С++

Возникла проблемка которая не дает мне спокойствия. Суть такова, есть указатель на целое int *a;Затем выделяем память, а=new int[10]; потом, заполнили его в цикле числами. И тут мне надо еще добавить ячеек в массив а, что бы туда записать числа, можно конечно через временный массив но мне не хотеться. Когда так делаю а=new int[20]; то вся информация что была раньше исчезает. Как увеличить массив без потери данных? Заранее спасибо!
Пример

int *a;
a =new int [10];

a=new int [20];//тут вся информация исчезает

11 ответов

#include <iostream>
#include <vector>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
<
vector<int> coll;
for(int i = 0;i < 10;++i)
coll.push_back(i);
coll.push_back(10);
coll.push_back(22);
for(int i = 0;i < coll.size();++i)
cout<<coll<<‘ ‘;
cout<<endl;
return 0;
>

Можно исспользовать любой тип. Главное чтобы для него были определенны оператор присваивания и конструктор копирования.

Ну или можно исспользовать указатель на тип (который сам по себе тип но у него есть оператор присваивания). ))

Информация не исчезает, а просто становится недоступной, потому что выделяется новый блок, но в программе отсутствует указатель на старый блок — утечка памяти.
Для простых типов данных можно использовать функцию realloc

Я постоянно работаю с динамическими массивами в Object Pascal и PHP. Вот внезапно возникла необходимость использования языка C++ и пришлось немного почесать голову )). :confused:

Библиотека <vector> это конечно хорошо, но почему изменение длины массива не реализовано в стандартной библиотеке. А ведь C++ самый успешный и развивающийся язык программирования.

Учитывая тот факт что в С++ можно объявить массив где угодно в теле алгоритма, то преимущества динамического массива сужаются к двум:
1. можно создавать (суб)подмассивы произвольной длинны (в принципе существенный фактор);
2. тут же удалить массив из памяти после выполнения необходимых операций (не дожидаясь конца функции и т.п.).

А для Object Pascal преимущества динамического массива увеличиваются как минимум на два:
3. не занимает памяти, пока массив не востребован, т.е. не задана длинна (большой бонус, поскольку переменные объявляются только в разделе var и занимают память от начала алгоритма);
4. можно сколь угодно удлинять и укорачивать массив без потери данных в пределах усечения ( пример SetLength(Massiv, 1) ).

Резонные вопросы:
1. может Object Pascal хитрит, т.е. метод SetLength создает второй массив новой длины и копирует данные с первого и переписывает указатель?
2. или забросили и недоделали данную операцию в С++ поскольку была библиотека <vector> (бред какой-то)? 😮

Ответы на свои вопросы искал заранее, но нигде ничего не нашел. Может Вы, где что видели или знаете? Заранее благодарен. :rolleyes:

Расширение динамического массива

Расширение динамического массива
В С для работы с динамической памятью используются операторы: malloc,calloc для выделения.

Расширение динамического массива
Доброго времени суток. Прошу помощи. Моя проблема заключается в том, что не могу понять как.

Расширение динамического массива объектов
Здравствуйте, форумчане. Моя задача написать функцию,которая добавляет новый объект в динамический.

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива
Создайте класс динамического массива, в котором реализована проверка выхода за границы массива.

"изменить" размер динамически созданного массива можно создав новый динамический массив и скопировав данные из существующего в новый.

How to a resize a dynamic array?

How do I resize p so I am able to to fit x in as like an array. I don’t want to use a vector or static array as I am trying to learn the language. I need to use pointers because I don’t know the initial size. Any attempt is appreciated.

3 Answers 3

The simplest answer is that you should use higher level components than raw arrays and raw memory for the reading. That way the library will handle this for you. A simple way of reading a set of numbers into an application (without error handling) could be done with this simple code:

The code creates a couple of input iterators out of the stream to read int values, and uses a back_inserter iterator that will push_back onto the vector. The vector itself will manage growing the memory buffer as needed.

If you want to do this manually you can, you just need to allocate a larger chunk of memory, copy the first N elements from the old buffer, release the old buffer and continue reading until the larger buffer gets filled, at which point you follow the same procedure: allocate, copy, deallocate old, continue inserting.

Как увеличить размер массива в C++?

Подскажите пожалуйста примерную идею,как можно увеличить размер массива на с++.
Задача такова,что есть динамический массив,который пользователь заполняет.Далее,нужно написать функцию,которая добавляет элемент к массиву только в том случае,если этот елемент отсутствует. Написал вот такую функцию:

Она возвращает адрес нового массива,далее пытаюсь принять этот результат:

Но он мне возвращает нулевой адрес.На сколько я понимаю,это происходит из за того,что время жизни моего нового массива заканчивается на выходе из функции. Как это побороть?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Школа онлайн с государственным аттестатом