#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
хранит свои элементы в непрерывном хранилище). Удаление с конца практически ничего не стоит.