Другие языки программирования и технологии
Как удалить элемент массива со сдвигом остальных элементов в С++
Прошли динамические массивы и указатели, векторы не проходили.
#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);
}
#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);
}
Aitok_9191
где return 0; в main? :D
Сдвиг элементов выполняй заполнением массива нового. int * mas1=new (n); int *mas2= new(n-1); перебрось элементы из 1в 2 без удаленного и delete [] mas1; вернешь из функции указатель на mas2.
Василь Антоніщак
Только проблема одна. Удаление массива mas2. Иначе память будет съедать после каждого запуска. Поэтому с++ надо делать класс с конструктором, а в деструкторе удалишь последний массив по окончании работы программы!
Похожие вопросы
- Не пойму как удалить элементы массива (C++).
- Как из массива удалить элемент?
- Help me!Удалить элементы кратные 2. Добавить после каждого нечетного элемента массива элемент со значением 0. си++
- c# удалить элемент
- Помогите! Ошибка при попытке удалить динамический массив
- 1.Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить все его минимальные элементы нулями.
- Объясните пожалуйста, что означает эта строка WRITE('ВВЕДИTE ЭЛЕМЕНТ МАССИВА '); READLN(MAS[1])?
- В одномерном массиве, состоящем из n вещественных элементов, вычис- лить: 39 1) сумму положительных элементов массив
- Microsoft Visual C++ 6.0 В одномерном массиве, состоящем из n вещественных элементов, вычислить...
- Помогите с С++. Надо найти произведение элементов одномерного массива между первым и последним 0.