Вот код (С++): #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; }
При этом размер вектора уменьшается. Странно, вроде элемент должен удалиться вместе с ячейкой, или я что то не понимаю?
Он удаляет элементы путём перемещения их в конец. Вы удаляете концевой элемент, он тупо уменьшает size на единицу и на этом заканчивает свою работу. Но вы как выводили n элементов, так и продолжаете выводить. Это неправильно. Нужно так...
for (auto x : a) cout << x << ' '; puts("");
Или так...
for (int i = 0; i < a.size(); i++){ cout << a[i] << ' '; }
Для увеличения быстродействия память занимаемая классом vector изменяется не при каждом изменении "размера", а ошибки выхода за границу С++ не обрабатывает Текущий реальный размер выделенной памяти возвращает capacity()
#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;
}
При этом размер вектора уменьшается. Странно, вроде элемент должен удалиться вместе с ячейкой, или я что то не понимаю?