[英]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.