采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
为啥resize操作会把data[size]这个元素抹掉。data[size]不是正好在释放空间后原来capacity/2的最后一个元素么。
还有对于后面capacity/4的时候才折半释放,这时候data[size]也应该完全不用提前备份了,它就是存在新的数组中的。
我觉得我没有特别理解你的问题,如果下面的陈述没有回答你的问题,请补充的你问题。。。
resize的过程中,新开辟了一片空间,这片空间和原来data指针中指向的空间一点关系都没有。所以需要将原来空间里的数据挪到新的空间中,再将原来的空间释放掉。将data指针指向新的空间。所以,这个过程是不存在抹去什么数据,或者什么数据还在哪里,是两片空间之间数据的转移。
删除元素后,容量为一半的时候,再进行resize操作。也就是删除第11个元素的时候,需要把第11个元素保存起来,然后resize成容量为10的,size变为11-1,capacity变为20/2。不保存起来的话,返回的是第10个。
如果按照视频一开始的代码的话,返回的不就应该是第10个么。在添加resize的操作之前,视频中一开始的代码如下: T pop_back() { assert( size>0 ); size--; return data[size]; } 假设我们删除的是第11个元素,那么size--后再返回的本来就是data[10]。 这个时候就算resize了,那10也是最后一个元素。 当然,在后面的代码里备份元素的操作放在了resize--这就没话说。只是说逻辑上和前面不太对应。
登录后可查看更多问答,登录/注册
课程配套大量BAT面试真题,高频算法题解析,强化训练
1.0k 13
1.1k 12
611 11
1.5k 10
1.1k 10