リストのイテレータを次のように使用しようとしていますが、これは正しい方法ですか?リスト内のベクトルのイテレータを使用する
私は2つのベクトルv1とv2を持ち、it1とit2の2つのイテレータを使用しています。後でiterator it1とit2をpush_backするためにlist<vector<int>::iterator>
というリストを使用しています。これはうまくいきますが、ベクトルのいずれかが空であれば、それはクラッシュします。
int main() {
vector<int> v1 ={1,2,3};
vector<int> v2 ={4,5,6,7};
vector<int>::iterator it1 = v1.begin();
vector<int>::iterator it2 = v2.begin();
list<vector<int>::iterator> l;
l.push_back(it1);
l.push_back(it2);
for(auto a : l){
vector<int>::iterator it = a;
while(*it){
cout<<*it<<endl;
it++;
}
}
return 0;
}
これはかなり狂っています。なぜイテレータのベクトルで、ベクターが変異していると無効になりますか?また、エンドイテレータをキャプチャしていません。それは、あなたがベクトルの終わりにいることを知っておくべき方法であり、 'それ 'ではありません。リストが空の場合、 'begin == end'となるので、反復がなく、' it'を逆参照する必要はありません。 –