以下代码导致此错误:
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());
导致此错误。 (或者不是。请参阅下面的评论。)
据我所知,上面的代码应该擦除整个向量,在这种情况下这是期望的行为。
我做错了什么?
答案 0 :(得分:5)
尝试在表达式中添加括号:bestLine.end() - (searchDepth - depth)
。如果简单地从左到右进行评估,结果就会大不相同。
答案 1 :(得分:1)
检查bestLine.size()是否大于searchDepth - depth,但是你减去searchDepth + depth。在减法中更改深度前的符号:
bestLine.erase(bestLine.begin(), bestLine.end() - searchDepth *+* depth);
答案 2 :(得分:1)
这不是编码问题,而是数学问题。
有问题的数学:
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)