我的程序抛出一个错误,声称向量下标超出范围。 (C++)
My Program is throwing an error that claims the vector subscript is out of range. (C++)
我正在尝试创建一个向量来保存我的 class 对象的用户最高价值。不幸的是,我 运行 遇到一个错误,指出我的矢量下标超出范围。我的主要猜测是我分析矢量的每个元素的方式或者我创建矢量的方式可能有问题。如有任何建议,我们将不胜感激!
...
unsigned int population = 3;
vector<Platypus> pop;
for(unsigned int i = 0; i < population; i++) {
pop.push_back(Platypus());
}
for (unsigned int i = 0; i < length; i++) {
for (unsigned int j = 0; j < population; j++) {
if (i%(int)fabs(4 - eatAmount) == 0) {
pop.at(j).eat();
}
if(pop.at(j).getAge() >= 24 &&
pop.at(j).getGender()=='F' &&
pop.at(j).getAlive()==1 &&
pop.at(j).getMutant()!=0){
pop.push_back(pop.at(j).hatch());
}
if (i > 30) {
pop.at(j).age_me(1);
}
if (j % 3 == 0 && j!=0) {
pop.at(j).fight(pop.at(j - 1));
}
pop.at(j).print(cout);
}
}
for (int i = pop.size(); i > 0; i--) {
if (pop[i].getAlive() == 0) {
pop.erase(pop.begin()+i);
}
}
}
这就是你的罪魁祸首:
for (int i = pop.size(); i > 0; i--) {
if (pop[i].getAlive() == 0) { // HERE
pop.erase(pop.begin()+i);
}
}
在第一次循环迭代中,i
被初始化为向量的大小。要将其转换为有效索引,您需要减去 1,否则您将越界。
我正在尝试创建一个向量来保存我的 class 对象的用户最高价值。不幸的是,我 运行 遇到一个错误,指出我的矢量下标超出范围。我的主要猜测是我分析矢量的每个元素的方式或者我创建矢量的方式可能有问题。如有任何建议,我们将不胜感激!
...
unsigned int population = 3;
vector<Platypus> pop;
for(unsigned int i = 0; i < population; i++) {
pop.push_back(Platypus());
}
for (unsigned int i = 0; i < length; i++) {
for (unsigned int j = 0; j < population; j++) {
if (i%(int)fabs(4 - eatAmount) == 0) {
pop.at(j).eat();
}
if(pop.at(j).getAge() >= 24 &&
pop.at(j).getGender()=='F' &&
pop.at(j).getAlive()==1 &&
pop.at(j).getMutant()!=0){
pop.push_back(pop.at(j).hatch());
}
if (i > 30) {
pop.at(j).age_me(1);
}
if (j % 3 == 0 && j!=0) {
pop.at(j).fight(pop.at(j - 1));
}
pop.at(j).print(cout);
}
}
for (int i = pop.size(); i > 0; i--) {
if (pop[i].getAlive() == 0) {
pop.erase(pop.begin()+i);
}
}
}
这就是你的罪魁祸首:
for (int i = pop.size(); i > 0; i--) {
if (pop[i].getAlive() == 0) { // HERE
pop.erase(pop.begin()+i);
}
}
在第一次循环迭代中,i
被初始化为向量的大小。要将其转换为有效索引,您需要减去 1,否则您将越界。