gpt4 book ai didi

C++ vector 迭代器错误

转载 作者:太空狗 更新时间:2023-10-29 23:53:25 24 4
gpt4 key购买 nike

我刚刚学习如何在 vector 上使用迭代器,但我遇到了一些运行时错误问题。这是代码部分:

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 迭代器不可取消引用”的错误,我认为这与迭代器到达末尾有关,而且我也得到一个“vector 删除迭代器超出范围”的错误,尽管我我们试图用声明来解释这一点

if (it == nums.end()) it = nums.begin();    

没有用。我还遇到了一些“vector 迭代器不可递增”错误,我发现这与使用删除函数有关,但我使用了

it = nums.erase(it);

考虑到无效的迭代器,这是我在网上可以找到的唯一建议。

我试图让迭代器多次扫过 vector ,每次删除特定值直到只剩下一个(我发布的代码实际上循环了几次)。如果你们有任何消除这些错误的建议或者可以解释它们的来源,我将不胜感激:)

谢谢,

克里斯

最佳答案

当您使用时:

it = nums.erase(it);

it 被设置为被删除元素之后的元素。如果您删除 nums 中的最后一个元素, 将指向 nums.end()。你没有验证 it 没有指向 end() 所以你得到了错误。

既然你没有解释你想要实现的逻辑,我就不深究了。我只是建议您在删除元素之前添加一个迭代器验证,即:

if (it != nums.end())
it = nums.erase(it);

关于C++ vector 迭代器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11056646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com