列表迭代器和 - 运算符的问题

时间:2013-04-06 04:05:44

标签: c++

有谁能告诉我为什么我的列表迭代器讨厌.end() - 1?我想在列表结束之前将iterato改为一个,我的印象是你总能做到这一点!

请求代码

std::list<Hammer::shared_ptr<Hammer::Actor>> collisionActorsList;

std::list<Hammer::shared_ptr<Hammer::Actor>>::iterator _actorUpdateIter =           collisionActorsList.begin();
while(_actorUpdateIter != (collisionActorsList.end()-1)) // ERROR HERE
{
    // check against every other actor 
    std::list<Hammer::shared_ptr<Hammer::Actor>>::iterator _otherActorsUpdateIter =  _actorUpdateIter+1; // ERROR HERE TOO
    while(_otherActorsUpdateIter != collisionActorsList.end())
    {// SOME STUFF }
}

1 个答案:

答案 0 :(得分:3)

std::list使用双向迭代器,它不支持operator-operator+。使用std::prev(collisionActorsList.end())std::next(_actorUpdateIter)

正如下面评论中所指出的,您应该知道您的列表是否为空。如果是,这些将无法满足您的需求。有一个简单的功能:collisionActorsList.empty()