数据结构 - 如何理解C++区间删除算法中的“更新规模”操作?
怪我咯
怪我咯 2017-04-17 13:34:29
0
4
700

正在自学数据结构,遇到一个问题(如图)始终难以理解:_size=lo为更新规模,或者说丢弃尾部的操作,为什么不是hi=_size,因为元素移位后,有效的数据序列应该是n-hi+lo位置之前的元素构成的,也就是vi[hi]之后的元素都应该丢弃,所以hi=_size不是很合理吗。
希望大神可以帮忙解决,谢谢!

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(4)
黄舟

你打箭頭的那一行已經對lo這個變數累加了

伊谢尔伦

因為是用[hi,_size]之間的元素去覆蓋[lo, _size+lo-hi]區間的元素.
hi增加到_size, 對應的lo會增加到_size+lo- hi,
即_size+lo-hi是最後一個元素的位置,即新的_size值

而程式碼裡使用了lo來標記最後一個元素的位置, 所以最後大小就是_size=lo.

刘奇

在這個函數中lohi都是傳值參數,也就是函數運作完成之後,這兩個值就銷毀了。
對於vector而言,_size是它的成員。它透過_size來決定保存的元素的個數。
所以這裡要修改的就是_size,而不會是hi

黄舟

hi=_size不合理

  • hi的意義剛開始是要刪除的區間右端點,while結束後表示剩餘元素的右端點;而_size未更新前,表示未刪除元素時的右端點,while結束後,未更新的_size是沒意義的,再把hi賦值為_size是什麼鬼

  • lohi是局部變數(參數),作用域是函數內,函數執行完後即銷毀,更新 hi 是沒有意義的。

  • 表示vector規模的是_size,也就是呼叫v.size()回傳的值,所以應該更新_size

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板