Как работает этот метод удаления элемента из стека?

#c #vector #element

#c #вектор #элемент

Вопрос:

Я только начал посещать занятия по C в моем местном колледже, и преподаватель дал классу задание, в котором мы должны создать вектор и удалить элемент из середины стека.

Она привела этот пример:

 vect[3] = vect[vect.size()-1];
vect.pop_back();
  

Теперь .. я протестировал его, и он работает, я просто не уверен, как это работает или почему это работает. Я уверен, что кто-нибудь мог бы дать простое объяснение?

Комментарии:

1. Обратите внимание, что пример невозможен только с операциями стека (push и pop). Чтобы стереть элемент в середине стека, вам нужно будет создать новый стек, поместить элементы в новый стек, поместить элемент, который вы хотите удалить, и поместить их обратно в исходный..

Ответ №1:

Вы хотите удалить элемент из середины вектора, поэтому вы просто перезаписываете его последним элементом (с индексом size()-1 ) — поскольку последний элемент таким образом становится избыточным, мы можем pop_back() это сделать. Наконец, мы получили желаемый результат — размер вектора уменьшен на единицу, а старое значение в vect[3] исчезло.

Обратите внимание, что это не сохраняет порядок элементов в векторе, но это относительно эффективно — удаление из середины вектора может потребовать большого копирования памяти, поскольку все элементы после удаляемого элемента должны быть сдвинуты на единицу, чтобы учесть пробел (помните: a std::vector хранит свои элементы в непрерывном хранилище). Удаление с конца практически ничего не стоит.