我只是在学习如何在向量上使用迭代器,并且遇到了一些运行时错误的问题。这是代码部分:
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;
}
}
注释掉的行给了我一个“vector iterator is not dereferencable”错误,我认为这与迭代器到达末尾有关,而且我也得到一个“vector erase iterator outside range”错误,虽然我试过了用声明解释这一点
if (it == nums.end()) it = nums.begin();
无济于事。我还遇到了一些“向量迭代器不可递增”错误,我发现这与使用擦除函数有关,但我使用了
it = nums.erase(it);
解释无效的迭代器,这是我在网上任何地方都能找到的唯一建议。
我试图让迭代器多次扫描向量,在每次传递时擦除特定值,直到只剩下一个(我发布的代码实际上循环了几次)。如果你们有任何建议来消除这些错误或者可以解释它们的来源,我真的很感激:)
谢谢,
克里斯