-2
我一直在頭痛這個問題。我已經向自己製造了一個CLI空間射擊遊戲,在那裏你有飛船,激光和流星進行射擊。問題是這樣的:每當激光或流星到達我們競技場的邊界時,我想從矢量中抹去,這樣它就不會聚集起來。以下是我的工作代碼現在的樣子:C++矢量迭代器不增量
std::vector<Meteoras>::iterator itMet = meteorai.begin();
std::vector<Lazeris>::iterator itLaz = lazeriai.begin();
while (itMet != meteorai.end() || itLaz != lazeriai.end())
{
if (itLaz != lazeriai.end())
{
if (itLaz->getCoord()->x == j && itLaz->getCoord()->y == i)
{
itLaz->move();
++j;
if (itLaz->getCoord()->x >= ILGIS - 1) continue;
else std::cout << itLaz->getIcon();
}
++itLaz;
}
if (itMet != meteorai.end())
{
if (itMet->getCoord()->x - 1 == j && itMet->getCoord()->y == i)
{
itMet->move();
++j;
if (itMet->getCoord()->x <= 0) continue;
else std::cout << itMet->getIcon();
}
++itMet;
}
}
所以有兩個「繼續」在那裏。而不是他們我試着把迭代器刪除(如在itLaz = lazeriai.erase(itLaz)
,但程序似乎在運行時崩潰給我之前說過的錯誤,我試着做其他邏輯檢查,但似乎也沒有工作,如果有人可以解釋從矢量中去除無用物體(在這種情況下是流星/激光)的正確方法。
刪除矢量元素會導致迭代器無效。擦除矢量元素後,您需要在開始時重新啓動。 –
您可能能夠從矢量的末尾開始並繼續到矢量的開始位置。任何擦除的元素都會影響您已搜索的元素的順序。不能保證迭代器在元素被擦除後即使是反向也不會有效。 –
@ThomasMatthews阿哈。好的。但爲什麼不將它重置到矢量的開頭?它會再次開始循環,直到它達到另一個可刪除的程度,不是嗎? – Zablas