Удалить N элементов, начиная с номера K, где N и K вводятся с клавиатуры
#include <iostream>
#include <cmath>
#include <windows.h>
#include <stdlib.h>
#include <iomanip>
using namespace std;
int main(){
SetConsoleCP(65001);
SetConsoleOutputCP(65001);
srand(time(NULL));
int size;
cout << "Enter size of array: ";
cin >> size;
int n;
int k;
cout << "Enter n: ";
cin >> n;
cout << "Enter k: ";
cin >> k;
int *arr = new int[size];
for(int i = 0; i < size; i++){
arr[i] = rand() % 100;
cout << arr[i] << " ";
}
cout << endl;
for (int k; k < size; k++)
{
if (n > 0){
n - 1;
delete arr[k];
}
}
for(int i = 0; i < size; i++){
cout << arr[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
Ответы (1 шт):
Автор решения: AlexGlebe
→ Ссылка
Удаление элементов в массиве производится не с помощью команды delete[], а переписыванием данных с одного места на другое. Сначала до индекса K оставить всё в покое, а потом прописывать без удалённых N элементов
arr[0] = arr[0]
..
arr[k-1] = arr[k-1]
arr[k] = arr[k+n]
..
arr[size-1-n] = arr[size-1]
arr[size-n] = XXX
...
Дальше надо не забывать уменьшить переменную size, так как вы удалили эти элементы. Только в конце программы уже можно один раз освободить выделенную память у системы с помощью delete[].
В своей попытке вы заново определили переменную k, for (int k; k < size; k++) и она объявляется новой и скрывает начальную переменную. Повторное определение обычно всегда приводит к логическим ошибкам.
Вот так происходит перемещение данных :
for ( int j = k ; j < size-n; ++j )
arr [j] = arr [j+n];
size -= n ;