C++ 为什么我会得到一个“a”;向量迭代器+;“偏移量超出范围”;错误?

C++ 为什么我会得到一个“a”;向量迭代器+;“偏移量超出范围”;错误?,c++,visual-c++,vector,C++,Visual C++,Vector,以下代码导致此错误: if (bestLine.size() > searchDepth - depth) bestLine.erase(bestLine.begin(), bestLine.end() - searchDepth - depth); 当我在出错时检查searchDepth-depth的值时,它是0 所以本质上, if (bestLine.size() > 0) bestLine.erase(bestLine.begin(), bestLine.en

以下代码导致此错误:

if (bestLine.size() > searchDepth - depth)
    bestLine.erase(bestLine.begin(), bestLine.end() - searchDepth - depth);
当我在出错时检查
searchDepth-depth
的值时,它是
0

所以本质上,

if (bestLine.size() > 0)
    bestLine.erase(bestLine.begin(), bestLine.end());
正在导致此错误。(或否。请参阅下面的评论。)

据我所知,上面的代码应该删除整个向量,这是本例中所需的行为

我做错了什么?

检查bestLine.size()是否大于searchDepth-depth,然后减去searchDepth+depth。更改减法中深度前的符号:
bestLine.erase(bestLine.begin()、bestLine.end()-searchDepth*+*depth)

尝试在表达式中添加括号:
bestLine.end()-(searchDepth-depth)
。如果简单地从左到右计算,结果会非常不同。

这不是一个编码问题,而是一个数学问题

问题数学:

   bestLine.end() - searchDepth - depth
=> bestLine.end() + (-1) * searchDepth + (-1) * depth
=> bestLine.end() + (-1) * (searchDepth + depth)
=> bestLine.end() - (searchDepth + depth)
因此,您不是试图擦除(searchDepth-depth)元素,而是试图擦除(searchDepth+depth)元素

正确的数学:

  bestLine.end() - (searchDepth - depth)

您是否将第一个代码替换为第二个代码(您认为基本相同),并查看错误是否仍然存在?好主意。没有,我没有收到错误。现在我真的很困惑。我添加了
无法尝试在表达式中添加括号
bestLine.end()-(searchDepth-depth)
我刚刚尝试过,现在它可以工作了。非常感谢。然而,我不明白为什么会有影响。无论哪种方式,操作顺序都是一样的。这很重要,
10-(8-8)
(10-8)-8
不一样。恐怕这对我不起作用。我收到了同样的错误。为什么这会修复错误,而我的建议却没有呢?@izomorphius:因为你可能会从开头减去太多。这减去了最小数量。(考虑
end-begin
是否为
5
searchDepth
是否为
10
depth
是否为
10