小编Chr*_*ris的帖子

C++向量迭代器错误

我只是学习如何在向量上使用迭代器,而且我在运行时错误方面遇到了一些麻烦.这是代码部分:

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;       
    }
}
Run Code Online (Sandbox Code Playgroud)

注释掉的行给了我一个"向量迭代器不可解除错误"的错误,我认为这与迭代器到达结尾有关,我也得到了一个"向量擦除迭代器超出范围"的错误,尽管我试过用声明说明这一点

if (it == nums.end()) it = nums.begin();    
Run Code Online (Sandbox Code Playgroud)

无济于事.我也得到了一些"矢量迭代器不可递增"的错误,我发现它与使用擦除功能有关,但我用过

it = nums.erase(it);
Run Code Online (Sandbox Code Playgroud)

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

我试图让迭代器多次扫描向量,在每次传递中擦除特定值,直到只留下一个(我发布的代码实际上已循环多次).如果你们有任何建议消除这些错误或者可以解释它们的来源,我真的很感激:)

谢谢,

克里斯

c++ iterator vector erase

2
推荐指数
1
解决办法
1940
查看次数

标签 统计

c++ ×1

erase ×1

iterator ×1

vector ×1