请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

释放空间的操作

为啥resize操作会把data[size]这个元素抹掉。data[size]不是正好在释放空间后原来capacity/2的最后一个元素么。

还有对于后面capacity/4的时候才折半释放,这时候data[size]也应该完全不用提前备份了,它就是存在新的数组中的。

正在回答 回答被采纳积分+3

2回答

liuyubobobo 2017-07-22 14:15:53

我觉得我没有特别理解你的问题,如果下面的陈述没有回答你的问题,请补充的你问题。。。


resize的过程中,新开辟了一片空间,这片空间和原来data指针中指向的空间一点关系都没有。所以需要将原来空间里的数据挪到新的空间中,再将原来的空间释放掉。将data指针指向新的空间。所以,这个过程是不存在抹去什么数据,或者什么数据还在哪里,是两片空间之间数据的转移。

2 回复 有任何疑惑可以回复我~
延鹏飞 2017-07-21 15:08:47

删除元素后,容量为一半的时候,再进行resize操作。也就是删除第11个元素的时候,需要把第11个元素保存起来,然后resize成容量为10的,size变为11-1,capacity变为20/2。不保存起来的话,返回的是第10个。

1 回复 有任何疑惑可以回复我~
  • 提问者 易萧 #1
    如果按照视频一开始的代码的话,返回的不就应该是第10个么。在添加resize的操作之前,视频中一开始的代码如下:
    T pop_back()
    {
        assert( size>0 );
        size--;
        return data[size];
    }
    假设我们删除的是第11个元素,那么size--后再返回的本来就是data[10]。
    这个时候就算resize了,那10也是最后一个元素。
    当然,在后面的代码里备份元素的操作放在了resize--这就没话说。只是说逻辑上和前面不太对应。
    回复 有任何疑惑可以回复我~ 2017-07-21 15:22:35
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信