ベクトルでイテレータを使用する方法を学んでいますが、実行時エラーで問題が発生しています。コードのセクションは次のとおりです。
vector<int> nums;
for (int i=0; i<N; i++) { nums.push_back(i+1); }
vector<int>::iterator it = nums.begin();
while(nums.size() > 1)
{
//cout << *it << " ";
it = nums.erase(it);
for (int i=0; i<m-1; i++)
{
if (it == nums.end())
it = nums.begin();
else
++it;
}
}
コメントアウトされた行により、「ベクター イテレーターは参照解除できません」というエラーが表示されます。これは、イテレーターが最後に到達したことに関係していると思われます。声明でそれを説明する
if (it == nums.end()) it = nums.begin();
無駄に。また、いくつかの「ベクトル反復子はインクリメントできません」というエラーが発生しました。これは、消去機能の使用に関係していることがわかりましたが、使用しました
it = nums.erase(it);
無効化されたイテレータを説明するためです。これは、オンラインのどこでも見つけることができる唯一のアドバイスです。
イテレータがベクトルを複数回スイープし、各パスで特定の値が 1 つだけになるまで消去しようとしています (投稿したコードは実際に数回ループされます)。これらのエラーを排除するための提案がある場合、またはそれらがどこから来ているかを説明できる場合は、本当に感謝します:)
ありがとう、
クリス