c++ - 我的程序抛出一个错误,声称向量下标超出范围。(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);
}
}
}
解决方案
这是你的罪魁祸首:
for (int i = pop.size(); i > 0; i--) {
if (pop[i].getAlive() == 0) { // HERE
pop.erase(pop.begin()+i);
}
}
在第一次循环迭代中,i
初始化为向量的大小。要将其转换为有效索引,您需要减去 1,否则您将超出范围。
推荐阅读
- oracle - 无法删除 Oracle 中的还原点
- apache-kafka - 离开组请求后 Spring Kafka 消费者无法重新加入
- c# - 将此代码上传到 unity 时出现错误
- html - 当我向右浮动时,菜单顺序会发生变化
- javascript - 阻止加载选择的 JS 文件
- r - 将 RMarkdown html 文档中的所有值更改为 NA 或 0
- javascript - 使用 livewire/alpine 关注错误包中的第一个表单元素?
- javascript - 如何将 JSON 数据导入 MySQL 并在网页上可视化?
- php - 使用php提取文档中的特定信息
- ruby-on-rails - NameError(未初始化的常量 ShopsController::ShopService - Ruby on Rails