0

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

应要求提供代码

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 }
}
4

1 回答 1

3

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

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

于 2013-04-06T04:09:51.440 回答