Задать вопрос
avpdnepr
@avpdnepr
Человек без любви опаснее тигра и акулы?

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

Предположим есть массив - array[1000].
Нужно удалить элемент 400 и при этом сдвинуть массив с 401 на 400, 402 на 401 и т.д.
Как это сделать одной командой без циклов?
  • Вопрос задан
  • 112 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 3
Therapyx
@Therapyx
Data Science
Никак, ты выделяешь статичную память для 1000 элементов типа "х". Если использовать сторонние библиотеки, это лишь дает вид, что такая операция делается в 1 строку. Чтобы потом сдвинуть последующие елементы назад, надо итерировать весь массив. Чтобы сделать его на 1 меньше, надо выделять новую инстанцию памяти под этот массив и копировать старые элементы в него.

Выбирая структуру данных - думай прежде как с ней придется работать, если она нужна тебе в динамичном варианте, то лучше используй vector.

std::vector<int> array;
array.erase(array.begin() + 400);


Хоть тут по сути и происходит тоже самое, что я описал выше. Но для этого есть соотвествующие методы в STL
Ответ написан
Комментировать
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
auto iterToRemove = std::next(a, 4);
std::copy(std::next(iterToRemove), std::end(a), iterToRemove);


UPD:
Нужно понимать, что поскольку мы не уменьшаем размер, в конце массива будет "мусор", а именно копия последнего элемента.
Ответ написан
@anikavoi
memcpy "сдвинет". Там тоже цикл, но "внутри".
Вы, судя по вопросу, не понимаете как устроен массив - это просто область памяти.
Удалить элемент можно в std::vector.
Например:

std::vector myarr;

myarr.push_back(0);
myarr.push_back(1);
myarr.push_back(2);
myarr.push_back(3);
myarr.push_back(4);

myarr.erase(myarr.begin()+2);

for(int n : myarr)
{
printf("%d\n",n);
}

0
1
3
4
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы