C++学習の道(14)---vectorエラー:vector iterator not incrementable"または"vector iterator+offset out of range"

1126 ワード

テストコード1:vectorg_vtStr1; vector g_vtStr2; vector g_vtStr3; g_vtStr1.push_back(_T(“Test1”)); g_vtStr1.push_back(_T(“Test2”)); g_vtStr1.push_back(_T(“Test3”)); g_vtStr1.push_back(_T(“Test0”)); sort(g_vtStr1.begin(),g_vtStr1.end());
g_vtStr2.push_back(_T("data1"));
g_vtStr2.push_back(_T("data2"));
g_vtStr3.resize(g_vtStr2.size());

//g_ならvtStr 3のsizeはg_より小さいvtStr1-g_vtStr 2の差は次のように誤るので、g_を保証しなければならない.vtStr 3のsizeサイズは差分vector::const_を収容するのに十分ですiterator it = set_difference(g_vtStr1.begin(),g_vtStr1.end(),g_vtStr2.begin(),g_vtStr2.end(),g_vtStr3.begin());
テストコード2:for(vector::const_iterator i=g_vtStr 1.begin();i != g_vtStr1.end();++i){if(i->CompareNoCase(_T("Test 0")==0){i=g_vtStr 1.erase(//ここでエラーを報告します}
}

コードはIteratorのearseを処理するときに少し問題があります.earse操作を1回実行すると、元の遍歴に使用されていたiteratorは無効になります.同時にearse操作はrの次の要素を指すiteratorを返し、遍歴を続けるには、戻ったiteratorで操作を続行する必要があります.変更:for(vector::const_iterator i=g_vtStr 1.begin();i != g_vtStr1.end();) { if ( i->CompareNoCase(_T(“Test0”)) == 0 ) { i = g_vtStr1.erase(i); } else { ++i; } }