首頁  >  問答  >  主體

数据结构 - 如何理解C++区间删除算法中的“更新规模”操作?

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

怪我咯怪我咯2765 天前678

全部回覆(4)我來回復

  • 黄舟

    黄舟2017-04-17 13:36:29

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

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦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.

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 13:36:29

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

    回覆
    0
  • 黄舟

    黄舟2017-04-17 13:36:29

    hi=_size不合理

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

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

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

    回覆
    0
  • 取消回覆