Другие языки программирования и технологии

Как удалить элемент массива со сдвигом остальных элементов в С++

Прошли динамические массивы и указатели, векторы не проходили.
#include <iostream>
#include <random>
#include <iomanip>
using namespace std;
int* create(const size_t size);
void fill(int* ptr, const size_t size, int stzrt, int finish);
int randomize(int a, int b);
void print(int* ptr, const size_t size, streamsize width);
size_t erase(int* ptr, const size_t size, const size_t index);
int main() {
setlocale(LC_CTYPE, "Russian");
int* ptr = nullptr;
cout << "Размер: ";
size_t size;
cin >> size;
if (ptr = create(size)) {
fill(ptr, size, 1, 100);
print(ptr, size, 4);
do {
cout << "Индекс: ";
size_t index;
cin >> index;
size = erase(ptr, size, index);
print(ptr, size, 4);
} while (size);
cout << "Массив не содержит элементов! \n";
delete[] ptr;
ptr = nullptr;
} else cout << "Не хватает памяти! \n";
cin.sync();
cin.get();
}
size_t erase(int* ptr, const size_t size, const size_t index) {
if (index >= size) return size;
for (size_t i = index + 1; i < size; ++i) ptr[i - 1] = ptr[i];
return size - 1;
}
void print(int* ptr, const size_t size, streamsize width) {
int* end = ptr + size;
for (auto begin = ptr; begin != end; ++begin) cout << setw(width) << *begin;
cout << endl;
}
void fill(int* ptr, const size_t size, int stzrt, int finish) {
int* end = ptr + size;
for (auto begin = ptr; begin != end; ++begin) *begin = randomize(stzrt, finish);
}
int* create(const size_t size) {
return new(nothrow) int[size];
}
int randomize(int a, int b) {
if (a > b) swap(a, b);
uniform_int_distribution<int> rand(a, b);
random_device rnd;
return rand(rnd);
}
Сергей Колонтаевский
Сергей Колонтаевский
72 037
Лучший ответ
Aitok_9191 где return 0; в main? :D
Сдвиг элементов выполняй заполнением массива нового. int * mas1=new (n); int *mas2= new(n-1); перебрось элементы из 1в 2 без удаленного и delete [] mas1; вернешь из функции указатель на mas2.
Василь Антоніщак Только проблема одна. Удаление массива mas2. Иначе память будет съедать после каждого запуска. Поэтому с++ надо делать класс с конструктором, а в деструкторе удалишь последний массив по окончании работы программы!