[英]Why am I getting a “vector iterator + offset out of range” error?
以下代碼導致此錯誤:
if (bestLine.size() > searchDepth - depth)
bestLine.erase(bestLine.begin(), bestLine.end() - searchDepth - depth);
當我檢查searchDepth - depth
的值searchDepth - depth
錯誤時的searchDepth - depth
,它是0
。
基本上,
if (bestLine.size() > 0)
bestLine.erase(bestLine.begin(), bestLine.end());
導致此錯誤。 (或者不是。請參閱下面的評論。)
據我所知,上面的代碼應該擦除整個向量,這是在這種情況下的期望行為。
我究竟做錯了什么?
嘗試在表達式中添加括號: bestLine.end() - (searchDepth - depth)
。 如果簡單地從左到右進行評估,結果就會大不相同。
你檢查bestLine.size()是否大於searchDepth - depth,然后你減去searchDepth + depth。 在減法中更改深度前的符號: bestLine.erase(bestLine.begin(), 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.