gpt4 book ai didi

c++如何在内部循环中使用带自动的 vector 删除对象

转载 作者:太空宇宙 更新时间:2023-11-04 15:35:13 24 4
gpt4 key购买 nike

大家好,stackoverflow,

我一直想知道是否有任何简单的方法可以: 迭代器控制的范围 for 循环 在访问容器时从容器中正确地删除对象;使用自动它。

对于标准的索引控制 for 循环,我会做这样的事情:

void del(int i){
cout<<"Deleting: "<<myObjects[i]<<':'<<myObjects[i]->c<<endl;
for(unsigned int j = 0; j < allObjects.size();){
if(allObjects[j] == myObjects[i]){
delete allObjects[j];
allObjects[j] = 0;
allObjects.erase(allObjects.begin()+j);
break;//Found and deleted first instance, escaping for-loop.
}else{
++j;
}
}
myObjects[i]=0;
myObjects.erase(myObjects.begin()+i);
}

自动 for 循环看起来像这样:

void del(int i){
cout<<myObjects[i]<<endl;
for(auto it: allObjects)
if(it == myObjects[i]){
delete it;
it = 0;
//allObjects.erase();// Found, needs erasing.
}
myObjects[i]=0;
myObjects.erase(myObjects.begin()+i);
}

我一直无法正确解决这个问题,一直在求助于老式索引(有很多方法可以使用索引)。

我可以删除它,并将其设置为 0,但是我如何在不知道索引的情况下从 vector 中删除它,并且可能在 vector 中删除它?我知道我可以跟踪循环并使用计数器来执行此操作,但这会破坏使用干净的迭代器循环的目的。

如果不在 vector 中删除,除了重新访问 vector 之外,之后我将如何以一种简单的方式进行删除?

使用索引驱动的 for 循环没有错,只是想知道是否有使用我们的新 friend “auto it”的简单替代方法。

谢谢。

最佳答案

很抱歉,没有办法使用基于范围的for循环来删除。您应该使用标准方式:

for(auto it = allObjects.begin(); it != allObjects.end();)
{
if(/* condition */)
it = allObjects.erase(it);
else
++it;
}

另请参阅此处的最佳答案:Can we erase the items in range-based for loop in c++11

关于c++如何在内部循环中使用带自动的 vector 删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35813352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com