好的。为了其他(更简单但不能说明问题)的问题,这可能看起来像,我不问这是可能的还是不可能的(因为我已经发现了),我问是否有更轻的替代方案题。是否有可能从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