使用向量时找不到错误发生的位置

问题描述

当我运行此代码时,我会收到调试断言失败错误

“表达式:向量擦除迭代器超出范围”

我找不到错误发生的位置。

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

但这很难说,因为你从来没有解释过你想要完成什么。