Копирование содержимого массива в массив с измененным размером в Stack Overflow

Я искал много тем здесь, но они, кажется, не отвечали мне точно.

Я пытаюсь сделать некоторые динамические массивы od перераспределения в C ++. Я не могу использовать что-либо из библиотек STL, поскольку мне нужно использовать это в домашней работе, где STL (векторы, …) явно запрещены.

До сих пор я пытался разработать такой код:

int * items = new int[3]; //my original array I'm about to resize
int * temp = new int[10];
for (int i = 0; i < 3; i++) temp[i] = items[i];

delete [] items;   //is this necessary to delete?
items = new int [10];
for (int i = 0; i < 10; i++) items[i] = temp[i];
delete [] temp;

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

редактировать: Когда я пытаюсь сделать items = temp; вместо

for (int i = 0; i < 10; i++) items[i] = temp[i]; и попытаться std::cout все мои элементы, я теряю первые два элемента, но Valgrind печатает их правильно.

0

Решение

Да первый delete[] является необходимым. Без этого вы бы потеряли память.

Что касается кода, который идет после этого первого delete[]все это можно заменить на:

items = temp;

Это сделало бы items укажите на массив из десяти элементов, который вы только что заполнили:

int * items = new int[3]; //my original array I'm about to resize
int * temp = new int[10];
for (int i = 0; i < 3; i++) temp[i] = items[i];
delete [] items;   //delete the original array before overwriting the pointer
items = temp;

Наконец, не забудьте delete[] items; когда вы закончите с массивом.

5

Другие решения

Контейнеры STL были сделаны, чтобы облегчить работу, как это. Это утомительно, но нет большого выбора, когда вам нужно использовать C-arrays.

Удаление

delete [] items;

необходимо, например, когда вы откажетесь от ссылки на массив, что вы сделали бы с назначением новой ссылки в

items = new int [10];

приведет к утечке памяти, так что это необходимо.

0

По вопросам рекламы [email protected]