ベクトルを深く消去する方法は?C++ STLベクトルディープイレース
次のコードを検討してください。
#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;
}
出力は私がしたいことは、私はエラーをスローするために無効とコンパイラであることを2から4にいずれかの[i]はVにアクセスしている
1 having index 0
2 having index 1
3 having index 2
4 having index 3
5 having index 4
2
4
です。
簡単な言葉で言えば、ベクターを深く消去する方法は?
これはUBです。あなたはそれを自分で確認する必要があります。代わりに 'std :: vector :: at'を使用してください。 – songyuanyao
ベクトルはその要素を定義によって連続したメモリに格納するので、あなたが望むものはありません – user463035818
そして、あなたはそれをコンパイル時のエラーにしたいと思っています。 – LogicStuff