Моя программа выдает ошибку, которая утверждает, что векторный индекс находится вне диапазона.(C ++) - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь создать вектор, в котором будет храниться значение моего класса, созданное пользователем.К сожалению, я сталкиваюсь с ошибкой, которая утверждает, что индекс моего вектора находится вне диапазона.Мое главное предположение - возможно, что-то не так с тем, как я анализирую каждый элемент вектора, или, возможно, с тем, как я создаю вектор.Любые предложения будут с благодарностью!

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

1 Ответ

0 голосов
/ 04 марта 2019

Это ваш виновник:

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

На первой итерации цикла i инициализируется размером вектора.Чтобы превратить это в действительный индекс, вам нужно вычесть 1, иначе вы выйдете за пределы.

...