C++ 遍历集合

标签 c++ iterator set std

<分区>

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

std::set<b2Body *>toDestroy;
//std::vector<b2Body *>toDestroy;

但现在我不确定如何迭代集合来查找对象。这是我的:

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);
    }

既然 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*>]()'

最佳答案

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

改变

std::vector<b2Body *>::iterator pos2;

std::set<b2Body *>::iterator pos2;

关于C++ 遍历集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5186063/

相关文章:

c++ - 从沙盒应用程序运行 clang 编译器的任何可能方法?

c++ - 重复的 switch 语句需要重构

java - 删除方法在 List 接口(interface)迭代器中抛出错误

c++ - STL vector 通过指针删除

ios - 如何创建一组自定义对象 (Swift)?

java - 使用 java 从文本文件获取和设置数据

c# - 用于从一组数字中确定所有可能的和的非递归算法

c++ - 从 native 进程加载 .NET PE 的内存

c++ - 如何将 clog 的 rdbuf() 重新定义为 clog 和日志文件的原始 rdbuf() 的三通?

vector - 如何在传递我正在迭代的向量时调用迭代器的函数?