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::listoperator-orをサポートしない双方向反復子を使用しますoperator+。とを使用std::prev(collisionActorsList.end())std::next(_actorUpdateIter)ます。

以下のコメントで指摘されているように、リストが空かどうかに注意する必要があります。もしそうなら、これらはあなたが望むことをすることができません。そのための簡単な関数があります: collisionActorsList.empty().

于 2013-04-06T04:09:51.440 に答える