有谁能告诉我为什么我的列表迭代器讨厌.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 }
}
答案 0 :(得分:3)
std::list
使用双向迭代器,它不支持operator-
或operator+
。使用std::prev(collisionActorsList.end())
和std::next(_actorUpdateIter)
。
正如下面评论中所指出的,您应该知道您的列表是否为空。如果是,这些将无法满足您的需求。有一个简单的功能:collisionActorsList.empty()
。