问题描述
“表达式:向量擦除迭代器超出范围”
我找不到错误发生的位置。
for (int i = 0; i < comb.size(); i++) {
if (couple.size() != 0 && couple.size() == mate * 2) {
vector<int>::iterator iter = couple.begin();
int rad = rand() % couple.size();
rad = (rad % 2 == 0 ? rad : rad + 1);
iter += rad;
iter = couple.erase(iter);
iter = couple.erase(iter);
}
couple.push_back(comb[i]);
printf("%d ",comb[i]);
}
解决方法
- 让我们假设
couple.size() == 6
。 - 让我们假设
rad == 5
。 - 然后
rad
将转换为 6。 - 然后您将在超过数组末尾的迭代器上调用 erase()。这是非法的。
我猜你应该这样做:
rad = (rad % 2 == 0 ? rad : rad - 1);
但这很难说,因为你从来没有解释过你想要完成什么。