繁体   English   中英

调试断言失败-向量迭代器不兼容

[英]Debug assertion failed - vector iterators are incompatible

我试图比较同一个向量中的两个迭代器,但是由于某种原因,它使我犯了这个错误:

那是相关的代码功能:

函数,它找到第一个迭代器并返回它的副本:

static const vector<Player*>::const_iterator findPlayer(
                    const vector<Player*> players, int id)
{ ///const
    vector<Player*>::const_iterator found
        = find_if(begin(players), end(players), [id] (Player* player) {
            return player->getId() == id;
        });
    return found;
}

这些是代码的比较笔画:

vector<Player*>::const_iterator found = findPlayer(this->_players_in, *cur_id);
if(found != end(this->_players_in))

有人知道原因吗?

看起来您正在复制向量,使用find_if将迭代器添加到该副本中,然后返回该迭代器。 这很不好,因为当您返回时,迭代器指向的向量将被破坏。

您应该通过参考传递球员。 您的声明应如下所示:

static const vector<player*>::const_iterator findPlayer(const vector<Player*>& players, int id)

(请注意&)

这样可以确保您返回的迭代器指向调用方提供的相同容器。

注意:这种断言不是标准的。 您的编译器/环境非常适合提供调试版本。 我在自定义容器的某些迭代器上实施了此类检查,这至少使我节省了十几次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM