Varsta>2&&i->Sex==“男性”) { ExistaTata=true;//dad exist i++; } 其他的 { i++; } for(it=Lista.begin();it!=Lista.end();it++) { it->Varsta++;//age++ it->title=it->Sex+“”+it->Nume+“”+it->Color+“”+to_string(static_cast(it->Varsta)); if(it->Varsta>2&&it->Sex==“女性”)//如果年龄>2岁且女性 if(ExistaTata)//如果爸爸存在 {//新兔子 Iepuras*f; f=新的IEPURA; 列表a.向后推(*f); } while(it->Varsta>10)//如果年龄>10,则删除兔子 { it=Lista.erase(它); } },c++,C++" /> Varsta>2&&i->Sex==“男性”) { ExistaTata=true;//dad exist i++; } 其他的 { i++; } for(it=Lista.begin();it!=Lista.end();it++) { it->Varsta++;//age++ it->title=it->Sex+“”+it->Nume+“”+it->Color+“”+to_string(static_cast(it->Varsta)); if(it->Varsta>2&&it->Sex==“女性”)//如果年龄>2岁且女性 if(ExistaTata)//如果爸爸存在 {//新兔子 Iepuras*f; f=新的IEPURA; 列表a.向后推(*f); } while(it->Varsta>10)//如果年龄>10,则删除兔子 { it=Lista.erase(它); } },c++,C++" />

C++;迭代器不可撤销 我是C++新手,我尝试做兔子运动,但是我的代码有一些问题,请看一下这个代码: 错误为向量迭代器不可解除限制//且//标准库超出范围。 谢谢你帮助我 void GameUpdate() { vector<Iepuras>::iterator it; vector<Iepuras>::iterator i; bool ExistaTata=false; // dad exist i = Lista.begin(); while (!ExistaTata && i != Lista.end()) // dad exist if (i->Varsta >2 && i->Sex == "Male") { ExistaTata = true; //dad exist i++; } else { i++; } for (it = Lista.begin(); it != Lista.end();it++) { it->Varsta++; // age ++ it->title = it->Sex + " " + it->Nume + " "+ it->Color + " " + to_string(static_cast<long long>(it->Varsta)); if (it->Varsta >2 && it->Sex == "Female") // if age > 2 and female if (ExistaTata) // if dad exist { // new bunny Iepuras *f; f = new Iepuras; Lista.push_back(*f); } while (it->Varsta>10) // if age > 10 erase bunny { it = Lista.erase(it); } } void GameUpdate() { 向量::迭代器; 向量::迭代器i; bool ExistaTata=false;//dad exist i=Lista.begin(); 而(!ExistaTata&&i!=Lista.end())//dad exist 如果(i->Varsta>2&&i->Sex==“男性”) { ExistaTata=true;//dad exist i++; } 其他的 { i++; } for(it=Lista.begin();it!=Lista.end();it++) { it->Varsta++;//age++ it->title=it->Sex+“”+it->Nume+“”+it->Color+“”+to_string(static_cast(it->Varsta)); if(it->Varsta>2&&it->Sex==“女性”)//如果年龄>2岁且女性 if(ExistaTata)//如果爸爸存在 {//新兔子 Iepuras*f; f=新的IEPURA; 列表a.向后推(*f); } while(it->Varsta>10)//如果年龄>10,则删除兔子 { it=Lista.erase(它); } }

C++;迭代器不可撤销 我是C++新手,我尝试做兔子运动,但是我的代码有一些问题,请看一下这个代码: 错误为向量迭代器不可解除限制//且//标准库超出范围。 谢谢你帮助我 void GameUpdate() { vector<Iepuras>::iterator it; vector<Iepuras>::iterator i; bool ExistaTata=false; // dad exist i = Lista.begin(); while (!ExistaTata && i != Lista.end()) // dad exist if (i->Varsta >2 && i->Sex == "Male") { ExistaTata = true; //dad exist i++; } else { i++; } for (it = Lista.begin(); it != Lista.end();it++) { it->Varsta++; // age ++ it->title = it->Sex + " " + it->Nume + " "+ it->Color + " " + to_string(static_cast<long long>(it->Varsta)); if (it->Varsta >2 && it->Sex == "Female") // if age > 2 and female if (ExistaTata) // if dad exist { // new bunny Iepuras *f; f = new Iepuras; Lista.push_back(*f); } while (it->Varsta>10) // if age > 10 erase bunny { it = Lista.erase(it); } } void GameUpdate() { 向量::迭代器; 向量::迭代器i; bool ExistaTata=false;//dad exist i=Lista.begin(); 而(!ExistaTata&&i!=Lista.end())//dad exist 如果(i->Varsta>2&&i->Sex==“男性”) { ExistaTata=true;//dad exist i++; } 其他的 { i++; } for(it=Lista.begin();it!=Lista.end();it++) { it->Varsta++;//age++ it->title=it->Sex+“”+it->Nume+“”+it->Color+“”+to_string(static_cast(it->Varsta)); if(it->Varsta>2&&it->Sex==“女性”)//如果年龄>2岁且女性 if(ExistaTata)//如果爸爸存在 {//新兔子 Iepuras*f; f=新的IEPURA; 列表a.向后推(*f); } while(it->Varsta>10)//如果年龄>10,则删除兔子 { it=Lista.erase(它); } },c++,C++,}我认为问题的原因是以下循环 while (it->Varsta>10) // if age > 10 erase bunny { it = Lista.erase(it); } 在这个循环之后,它可以等于Lista.end()(在这个循环中,您试图访问一个数据成员),然后在封闭循环中增加它 for (it = Lista.begin(); it != Lista.end();it++) 也可能是我弄错了,但我不知道在第一个循环之后迭代器I在哪里使用。因此,我看不

}我认为问题的原因是以下循环

while (it->Varsta>10) // if age > 10 erase bunny
{
    it = Lista.erase(it);

}
在这个循环之后,它可以等于Lista.end()(在这个循环中,您试图访问一个数据成员),然后在封闭循环中增加它

for (it = Lista.begin(); it != Lista.end();it++)
也可能是我弄错了,但我不知道在第一个循环之后迭代器I在哪里使用。因此,我看不出在循环外声明迭代器有任何意义

考虑到这些语句会导致内存泄漏

    if (ExistaTata)   // if dad exist
    {  // new bunny
        Iepuras *f;
        f = new Iepuras;
        Lista.push_back(*f);
    }
因为对象*f的副本将放置在向量中。因此,对象*f被分配但未被删除。你可以写得很简单

        Lista.push_back( Iepuras() );
也不是用手鼓跳舞

bool ExistaTata=false; // dad exist
    i = Lista.begin();
while (!ExistaTata && i != Lista.end()) // dad exist

    if (i->Varsta >2 && i->Sex == "Male")
    {
        ExistaTata = true; //dad exist
        i++;
    }
else 
{
    i++;
}
我建议使用标准算法
std::header
中声明的任何
,在这种情况下,您的代码会更清晰。

我认为你应该完全重写这个函数。

可能的重复你不需要
new
来创建新的“bunnies”(在你的情况下,它会导致内存泄漏),只需写
List.push_back(Iepuras())
Iepuras f;Lista.向后推(f)。非常感谢您,我将重写函数并听取您的建议。