Как глубоко стереть вектор?C++ STL vector Deep erase
Рассмотрите следующий код.
#include<algorithm>
#include<iostream>
#include<iterator>
#include<vector>
using namespace std;
int main(){
vector<int> v {1,2,3,4,5};
for_each(begin(v),end(v),[&v](int& n){
static auto i = (int)0;
if(n == 2){
v.erase (begin(v) +2, end(v));
}
cout << n << " having index " << i++ << endl;
});
v.erase (begin(v) +2, end(v));
cout << v.size() << endl << v[4] << endl;
}
Выход
1 having index 0
2 having index 1
3 having index 2
4 having index 3
5 having index 4
2
4
То, что я хочу, обращается к V [я] для любого я от 2 до 4 недействительным и компилятор выдаст ошибку.
В более простых словах, как глубоко стереть вектор?
Это UB; вы должны проверить его самостоятельно. Вместо этого используйте 'std :: vector :: at'. – songyuanyao
вектор сохраняет свой элемент в смежной памяти по определению, поэтому то, что вы хотите, не возможно – user463035818
И вы даже хотите, чтобы это была ошибка времени компиляции. – LogicStuff