首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向量迭代器不是增量.erase()

向量迭代器不是增量.erase()
EN

Stack Overflow用户
提问于 2014-04-27 19:59:03
回答 2查看 914关注 0票数 0

我试图删除这个向量中任何与播放器发生碰撞的元素。但是,当我试图从向量中删除元素时,程序会崩溃,并得到错误;“向量迭代器而不是增量”。

代码语言:javascript
复制
for (std::vector<Coin>::iterator i=CoinSet.begin(); i!=CoinSet.end(); i++) 
{
    if (i->PlayerClear(player.collider()) == true)
    {
        score++;
        cout<<score<<endl;
        CoinSet.erase(i);
    }
}

这段代码在"CoinSet.erase(i)“之前运行良好,我尝试在不同的地方使用"CoinSet.clear()”,但都没有效果。在这方面的任何帮助都将是伟大的,谢谢提前!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-27 20:00:50

这件事已经讨论到死了。不能对无效的迭代器进行操作。你想要这样的东西:

代码语言:javascript
复制
for (auto it = CoinSet.begin(); it != CoinSet.end(); /* no increment here! */ )
{
    if (/* ... */)
    {
        // ...
        CoinSet.erase(it++);
    }
    else
    {
        ++it;
    }
}
票数 3
EN

Stack Overflow用户

发布于 2018-07-05 08:12:32

我不喜欢把+-语句放在参数中。因此,erase()返回指向下一个元素的迭代器,因此可以将擦除行替换为:

代码语言:javascript
复制
it = CoinSet.erase(it); // iterator is replaced with valid one
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23328285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档