Как работает этот метод удаления элемента из стека? - PullRequest
3 голосов
/ 29 апреля 2011

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

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

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

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

1 Ответ

5 голосов
/ 29 апреля 2011

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

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

...