正在自学数据结构,遇到一个问题(如图)始终难以理解:_size=lo
为更新规模,或者说丢弃尾部的操作,为什么不是hi=_size
,因为元素移位后,有效的数据序列应该是n-hi+lo
位置之前的元素构成的,也就是vi[hi]
之后的元素都应该丢弃,所以hi=_size
不是很合理吗。
希望大神可以帮忙解决,谢谢!
伊谢尔伦2017-04-17 13:36:29
因為是用[hi,_size]之間的元素去覆蓋[lo, _size+lo-hi]區間的元素.
hi增加到_size, 對應的lo會增加到_size+lo- hi,
即_size+lo-hi是最後一個元素的位置,即新的_size值
而程式碼裡使用了lo來標記最後一個元素的位置, 所以最後大小就是_size=lo.
怪我咯2017-04-17 13:36:29
在這個函數中lo
和hi
都是傳值參數,也就是函數運作完成之後,這兩個值就銷毀了。
對於vector
而言,_size
是它的成員。它透過_size
來決定保存的元素的個數。
所以這裡要修改的就是_size
,而不會是hi
。
黄舟2017-04-17 13:36:29
hi=_size
不合理
hi
的意義剛開始是要刪除的區間右端點,while
結束後表示剩餘元素的右端點;而_size未更新前,表示未刪除元素時的右端點,while
結束後,未更新的_size是沒意義的,再把hi賦值為_size是什麼鬼
lo
和 hi
是局部變數(參數),作用域是函數內,函數執行完後即銷毀,更新 hi
是沒有意義的。
表示vector規模的是_size,也就是呼叫v.size()回傳的值,所以應該更新_size