這裏有一個小的代碼,這是使我們有點瘋了......重置迭代器與擦除方法
for (vector<QSharedPointer<Mine>>::iterator itMine = _mines.begin();
itMine != _mines.end();) {
auto point2 = shipFire[l].getBulletLine().p2();
if (_mines[pos]->checkCollision(point2)) { // _mines is a Vector<QSharedPointer<Mine>>
Explosion explosionMine(_mines[pos]->point());
_explosions.push_back(explosionMine);
itMine = _mines.erase(itMine);
bulletErased = true;
scoreFrame += 100;
}
else {
++itMine;
pos++;
}
}
這裏的問題是,在itMine
被刪除我們的兩個vector<..<Mine>>
的,它的製作程序意外關閉
我們想過這個問題,以及與此想出了:我們所有的迭代器被擦除礦一前一後無效,對不對?
但我們是一個有點困惑如何改變我們的實際代碼以適應新的?
的主要問題是:我們如何重置此ITR?
PS:如果您有任何疑問,或者您需要多一點的代碼來理解背後的邏輯,隨意問更多的問題!
最好的問候,並提前感謝您。
'_mines [POS]'和使用迭代器種類衝突的。您可能想重新考慮這一點。爲什麼不直接使用迭代器? – user4581301
[This](https://ideone.com/HKcjSM)在邏輯上類似於你所擁有的並且工作得很好(也就是說,你可以增加迭代器或者使用'erase'函數返回的值來安全地循環所有的元件)。 –
[查看刪除 - 刪除成語是否適合您](http://stackoverflow.com/questions/347441/erasing-elements-from-a-vector) – user4581301