Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Подскажите пожалуйста, почему я удаляю элемент в конце вектора (pop_back();) а элемент не удаляется.

Ольга РыбалкинаХвостова Профи (926), закрыт 4 года назад
Вот код (С++):
#include
#include
using namespace std;
int main(){
vector a;
int n, buffer;
cin >> n;
for (int i = 0; i < n; i++){
cin >> buffer;
a.push_back(buffer);
}

a.pop_back();

for (int i = 0; i < n; i++){
cout << a[i];//вывожу все элементы
}

cout <<endl;

cout << a.size();//размер вектора
return 0;
}

При этом размер вектора уменьшается. Странно, вроде элемент должен удалиться вместе с ячейкой, или я что то не понимаю?
Лучший ответ
Николай Веселуха Высший разум (385914) 4 года назад
Он удаляет элементы путём перемещения их в конец. Вы удаляете концевой элемент, он тупо уменьшает size на единицу и на этом заканчивает свою работу. Но вы как выводили n элементов, так и продолжаете выводить. Это неправильно. Нужно так...

for (auto x : a) cout << x << ' ';
puts("");

Или так...

for (int i = 0; i < a.size(); i++){
cout << a[i] << ' ';
}
Остальные ответы
Иван Сигаев Искусственный Интеллект (156901) 4 года назад
Для увеличения быстродействия память занимаемая классом vector изменяется не при каждом изменении "размера", а ошибки выхода за границу С++ не обрабатывает
Текущий реальный размер выделенной памяти возвращает capacity()

https://ideone.com/Q2Xpyw
Похожие вопросы