簡體   English   中英

通過C ++中包含指針的向量進行Foreach

[英]Foreach through a vector containing pointers in c++

我制作了一張地圖,上面充滿了矢量,看起來像這樣:

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 '->'

這意味着“對於超重運算符'->'無效的返回類型'CClass **'

問候

您可以在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
    }
}

playerIt是一個迭代器,而不是CClass的指針。 您需要取消引用迭代器以獲取指向CClass的指針:

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

playerIt是一個返回CClass*的迭代器,但是您可以通過operator->解引用該迭代器,因此您需要解引用該迭代器返回的指針。

所以,你可能說playerIt->cclass_method()時,你應該說(*playerIt)->cclass_method();

當然,在矢量中存儲shared_ptr <>或unique_ptr對象,以及使用typedef對地圖的vector <>部分進行別名化,可能會更容易理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM