好的。爲了其他(更簡單但不能說明問題)的問題,這可能看起來像,我不問這是可能的還是不可能的(因爲我已經發現了),我問是否有更輕的替代方案題。是否有可能從C++ 11的for循環中清除矢量?
我所擁有的是什麼將被視爲主類,並且在該主類中,有一個引用「世界地圖」類的變量。實際上,這個'WorldMap'類是其他類變量的容器。主類完成所有循環並更新所有活動的相應對象。在這個循環中有時候需要刪除一個位於遞歸集合內部的向量對象(如所提供的代碼所示)。重複引用必要變量作爲指向另一個指針的指針(以此類推)指向我需要的特定對象並稍後將其擦除(這是我在切換到C++之前使用的概念) 11),所以我有一個循環的範圍(也顯示在代碼中)。我的示例代碼顯示了我已經到位的想法,我想要削減乏味以及使代碼更具可讀性。
這是示例代碼:
struct item{
int stat;
};
struct character{
int otherStat;
std::vector<item> myItems;
};
struct charContainer{
std::map<int, character> myChars;
};
int main(){
//...
charContainer box;
//I want to do something closer to this
for(item targItem: box.myChars[iter].myItems){
//Then I only have to use targItem as the reference
if(targItem.isFinished)
box.myChars[iter].myItems.erase(targItem);
}
//Instead of doing this
for(int a=0;a<box.myChars[iter].myItems.size();a++){
//Then I have to repeatedly use box.myChars[iter].myItems[a]
if(box.myChars[iter].myItems[a].isFinished)
box.myChars[iter].myItems.erase(box.myChars[iter].myItems[a]);
}
}
TLDR:我想刪除的重複調用通過使用新的範圍爲在C++ 11所示迴路的全部參考的單調乏味。
EDIT:我不是試圖一次刪除所有元素。我在問我如何在第一個循環中刪除它們。當我在外部完成它們時(通過if語句),我正在刪除它們。我將如何刪除特定的元素,而不是所有的元素?
如果我這樣做了,那麼有人很有可能會走進來說:「我不知道你在問什麼或嘗試!」 – Molma
那麼,你可以清楚你所要求的沒有填充的東西,它不會改變自然的答案(如結構)和不可執行的信息......這是一條很好的路線,但我會說錯在了簡潔。換句話說:一個簡短的問題可能會給你一些澄清的要求,而一個長期的問題可能會被忽略而死。 –
這似乎讓你的注意力非常好:P。如果人們想立即開始追逐,還有一條TLDR消息。根據過去的經驗,我只是以這種方式進行格式化。 – Molma