84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
正在自学数据结构,遇到一个问题(如图)始终难以理解:_size=lo为更新规模,或者说丢弃尾部的操作,为什么不是hi=_size,因为元素移位后,有效的数据序列应该是n-hi+lo位置之前的元素构成的,也就是vi[hi]之后的元素都应该丢弃,所以hi=_size不是很合理吗。 希望大神可以帮忙解决,谢谢!
_size=lo
hi=_size
n-hi+lo
vi[hi]
走同样的路,发现不同的人生
你打箭頭的那一行已經對lo這個變數累加了
因為是用[hi,_size]之間的元素去覆蓋[lo, _size+lo-hi]區間的元素.hi增加到_size, 對應的lo會增加到_size+lo- hi, 即_size+lo-hi是最後一個元素的位置,即新的_size值
而程式碼裡使用了lo來標記最後一個元素的位置, 所以最後大小就是_size=lo.
在這個函數中lo和hi都是傳值參數,也就是函數運作完成之後,這兩個值就銷毀了。 對於vector而言,_size是它的成員。它透過_size來決定保存的元素的個數。 所以這裡要修改的就是_size,而不會是hi。
lo
hi
vector
_size
hi=_size不合理
hi的意義剛開始是要刪除的區間右端點,while結束後表示剩餘元素的右端點;而_size未更新前,表示未刪除元素時的右端點,while結束後,未更新的_size是沒意義的,再把hi賦值為_size是什麼鬼
while
lo和 hi是局部變數(參數),作用域是函數內,函數執行完後即銷毀,更新 hi 是沒有意義的。
表示vector規模的是_size,也就是呼叫v.size()回傳的值,所以應該更新_size
你打箭頭的那一行已經對lo這個變數累加了
因為是用[hi,_size]之間的元素去覆蓋[lo, _size+lo-hi]區間的元素.
hi增加到_size, 對應的lo會增加到_size+lo- hi,
即_size+lo-hi是最後一個元素的位置,即新的_size值
而程式碼裡使用了lo來標記最後一個元素的位置, 所以最後大小就是_size=lo.
在這個函數中
lo
和hi
都是傳值參數,也就是函數運作完成之後,這兩個值就銷毀了。對於
vector
而言,_size
是它的成員。它透過_size
來決定保存的元素的個數。所以這裡要修改的就是
_size
,而不會是hi
。hi=_size
不合理hi
的意義剛開始是要刪除的區間右端點,while
結束後表示剩餘元素的右端點;而_size未更新前,表示未刪除元素時的右端點,while
結束後,未更新的_size是沒意義的,再把hi賦值為_size是什麼鬼lo
和hi
是局部變數(參數),作用域是函數內,函數執行完後即銷毀,更新hi
是沒有意義的。表示vector規模的是_size,也就是呼叫v.size()回傳的值,所以應該更新_size