我正在尝试比较来自同一向量的两个迭代器,但由于某种原因它给我这个错误:
这是相关的代码功能:
函数,它找到第一个迭代器并返回它的副本:
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))
有人知道原因吗?
答案 0 :(得分:2)
看起来你正在制作向量的副本,使用find_if将迭代器放入该副本,然后返回该迭代器。这很糟糕,因为迭代器指向的向量将在您返回时被销毁。
您应该通过引用传递玩家。您的声明应如下所示:
static const vector<player*>::const_iterator findPlayer(const vector<Player*>& players, int id)
(注意&amp;)
这可确保您返回的迭代器指向调用者提供的同一容器。
注意:这种断言不是标准的。为调试版本提供它是非常类似的编译器/环境。我在一些自定义容器的迭代器上实现了这些类型的检查,它至少节省了我十几次。