84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
正在自学数据结构,遇到一个问题(如图)始终难以理解:_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