簡體   English   中英

為什么我得到“矢量迭代器+偏移超出范圍”錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM