首页 > 解决方案 > 我的程序抛出一个错误,声称向量下标超出范围。(C++)

问题描述

我正在尝试创建一个向量来保存我的类对象的用户最高价值。不幸的是,我遇到了一个错误,指出我的向量的下标超出范围。我的主要猜测是我分析向量的每个元素的方式或者我创建向量的方式可能有问题。任何建议将不胜感激!

...
    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);
        }
    }
}

标签: c++stdvector

解决方案


这是你的罪魁祸首:

for (int i = pop.size(); i > 0; i--) {
        if (pop[i].getAlive() == 0) { // HERE
            pop.erase(pop.begin()+i);
        }
    }

在第一次循环迭代中,i初始化为向量的大小。要将其转换为有效索引,您需要减去 1,否则您将超出范围。


推荐阅读