Top.Mail.Ru
Ответы

Как удалить элемент массива в С++?

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

По дате
По рейтингу
Аватар пользователя
Просветленный
8лет

Если предполагается удаление элемента или вставка то массив должен быть динамическим.

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

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

например вставляем элемент

int* b = new int[ sz + 1 ] // 10 + 1
for( int i = 0; i < sz; ++i ){
b[ i ] = a[ i ];
}
b[ sz ] = новое вставляемое значение;

либо можно попробовать использовать функцию
//memcpy( b, &a[0], sz * sizeof( int ) ); //типа так, не проверял. sz * sizeof(int) размер в байтах - int = 4 байта по этому множить
//b[ sz ] = новое вставляемое значение;

delete []a; // удаляем старый массив
a = b; // присваиваем адрес нового массива указателю

так можно вставлять элементы, диапазон элементов в любое место массива.

Подобно этому можно удалять элементы, диапазон элементов.
Так же надо создавать новый массив и заполнять теми значениями которые остаются.

удаляем эелемент номер 4

int del_id = 4;

так как удаляем 1 элемент то размер нового массива sz - 1
int* c = new int[ --sz ];

теперь заполняем новый массив значениями

for( int i = 0, o = 0; i < sz; ++i, ++o ){
if( o == del_id ){
--i;
continue;
}
c[ i ] = a[ o ];
}//не тестировал, прямо в браузере пишу, но вроде все логично

delete []a;
a = c;

Аватар пользователя
Мастер
8лет

Для выделения нового сегмента памяти используется оператор 'new', для удаления 'delete'.
Но нельзя в массив добавлять\удалять по одному элементу.
Размер массива должен быть определен заранее, до его выделения.
Если размер неизвестен, используй структуры данных, типа списки.

Аватар пользователя
Просветленный
8лет

Вам для этого необходимо воспользоваться динамическими массивами - векторами. Они есть во многих библиотеках