ベクトルがあります。すべての要素を比較し、要素が1つ残るまで要素を削除する必要があります。私はいくつかのループを繰り返しますが、いくつかの要素を削除すると、「ベクトルの添え字が範囲外です」ということになります。 これは、要素を削除し、ベクトルの空の領域を反復しようとしているためですが、ループ条件がそれを処理すると思ったからです。反復処理中にベクトルから要素を削除する方法
基本的には、シェイプを保存していて、シェイプが重なるまでシェイプします。あなたは無効なインデックスの問題に実行して、または、添付アイテムを欠落リスクとしてLOOP-反復/の配列またはベクトルの大きさを変更することは避けるべき、典型的
while (shapeGrid.size() > 1)
{
for (int i = 0; i < shapeGrid.size(); i++)
{
for (int x = 0; x < shapeGrid.size(); x++)
{
if (conditionmet())
{
shapeGrid.erase(shapeGrid.begin() + x);
cout << "Shape Removed" << endl;
}
if (conditionmet())
{
shapeGrid.erase(shapeGrid.begin() + x);
cout << "Shape Removed" << endl;
}
}
}
for (int i = 0; i < shapeGrid.size(); i++) // Shuffle positions
{
shapeGrid[i].x = (rand() % 100) + 1;
shapeGrid[i].y = (rand() % 100) + 1;
}
}
'conditionmet()'ブロックを間違ってコピー・ペーストしましたか? – frslm
提案:タスクの簡素化を検討してください。 ** integeresの**配列**(ベクトルではない)があり、すべてのものを削除する必要があるとします。それについてどうやって行きますか?これは学習者のための非常に良いアルゴ問題ですが、あなた自身で解決策に来ることはあなたには良いことです。 – SergeyA
ループ中にベクトルを変更する場合は、 '.size()'の代わりにイテレータを使用してください。 –