Как удалить элемент массива в С++?
Когда мы создаем массив, в нем изначально нет никаких значений, никаких элементов, он пустой. После мы записываем в него какие-то элементы. И допустим, что нам нужно их удалить, не присвоить новые значение, а именно освободить массив, чтобы он опять был пустой. Есть ли функция, которая позволит это сделать, или как это вообще возможно сделать?
Если предполагается удаление элемента или вставка то массив должен быть динамическим.
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;
Для выделения нового сегмента памяти используется оператор 'new', для удаления 'delete'.
Но нельзя в массив добавлять\удалять по одному элементу.
Размер массива должен быть определен заранее, до его выделения.
Если размер неизвестен, используй структуры данных, типа списки.
Вам для этого необходимо воспользоваться динамическими массивами - векторами. Они есть во многих библиотеках