C++迭代一组

sol*_*sol 4 c++ iterator std set

我最近更改了一些代码以使用集合而不是向量:

std::set<b2Body *>toDestroy;
//std::vector<b2Body *>toDestroy;
Run Code Online (Sandbox Code Playgroud)

但是现在我不确定如何迭代集合来查找对象.这就是我所拥有的:

std::vector<b2Body *>::iterator pos2;
    for(pos2 = toDestroy.begin(); pos2 != toDestroy.end(); ++pos2) {
        b2Body *body = *pos2;     
        if (body->GetUserData() != NULL) {
            CCSprite *sprite = (CCSprite *) body->GetUserData();
            [self removeChild:sprite cleanup:YES];
        }
        _world->DestroyBody(body);
    }
Run Code Online (Sandbox Code Playgroud)

现在toDestroy是一个集合的等价物是什么?来自Objective-C所以我只是学习C++的最佳实践.

编辑:添加我得到的错误消息:

error: no match for 'operator=' in 'pos2 = toDestroy. std::set<_Key, _Compare, _Alloc>::begin [with _Key = b2Body*, _Compare = std::less<b2Body*>, _Alloc = std::allocator<b2Body*>]()'
Run Code Online (Sandbox Code Playgroud)

Jar*_*edC 5

您需要将迭代器声明为set迭代器:

更改

std::vector<b2Body *>::iterator pos2;
Run Code Online (Sandbox Code Playgroud)

std::set<b2Body *>::iterator pos2;
Run Code Online (Sandbox Code Playgroud)

  • 这是唯一的方法. (2认同)