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