Foreach通过包含c ++指针的向量

时间:2015-02-19 16:28:45

标签: c++ for-loop dictionary vector iterator

我制作的地图上装满了这样的矢量:

std::map<int, std::vector<CClass*>> pointers = getMap();

现在我想浏览地图的每个插槽,并通过地图中存储的矢量的每个插槽。

这是它通过地图的方式:

for (std::map<int, std::vector<CClass*>>::iterator it = pointers.begin(); it != pointers.end(); it++) 

这很好用,就像我想要的那样遍历每个对象。

但是现在我想浏览向量中的每个插槽,我试着这样做:

for (std::vector<CClass*>::iterator playerIt = it->second.begin(); playerIt != it->second.end(); playerIt++) 

如果我想访问存储在其中的值,编译器会给我这个错误:

file.cpp(552) : error C2839: Ungültiger Rückgabetyp 'CClass **' für überladenen Operator '->'

这意味着&#34;无效的返回类型&#39; CClass **&#39;对于超重运算符&#39; - &gt;&#39;

问候

3 个答案:

答案 0 :(得分:7)

你可以在C ++ 11中使用基于范围的for循环来处理这个更可读的

for (auto& element : pointers)
{
    for (auto& player : element.second)
    {
        // player will be a CClass* that you can use
        std::string name = player->GetName();  // For example
    }
}

答案 1 :(得分:1)

playerIt是一个迭代器,而不是指向CClass的指针。您需要取消引用迭代器以获取指向CClass

的指针
CClass * player = (*playerIt);
player->ClassMethod(...); // or whatever

答案 2 :(得分:1)

playerIt是一个返回CClass*的迭代器,但你通过operator-&gt;取消引用迭代器,所以你需要取消引用迭代器返回的指针。

所以当你应该说playerIt->cclass_method()

时,你可能会说(*playerIt)->cclass_method();

当然,在向量中存储shared_ptr&lt;&gt;或unique_ptr对象可能更好更容易理解,同时使用typedef为向量&lt;&gt;设置别名。地图的一部分。