C++ vector中的迭代器失效问题

vector中的迭代器失效问题
在使用vector的成员函数时,有两个成员函数内部会出!](https://img-blog.csdnimg.cn/20181124093029161.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01famlhbmppYW5qaWFv,size_16,color_FFFFFF,t_70)现迭代器失效的问题。分别是insert和erase而这两个成员函数迭代器失效的原因并不相同。
insert

在我们使用insert的接口时,不会遇到迭代器的失效问题的影响,因为在insert中已经处理过l。而此处所说的就是在insert实现过程中出现的迭代器失效问题。

insert(iterator pos,value_type value);
vector类中的insert函数,在所传迭代器位置的数前面插入一个数,返回值是所插入位置的迭代器。

现在我们对于该函数进行模拟实现,插入时有两种情况

  • 插入后长度不会超出当前容量
  • 插入后超出当前容量

对于第一种,在容量足够的情况下插入,进行正常的元素挪动和插入就行了。

对于第二种,当插入后的长度超出了容量的范围。此时我们就需要先进行扩容。

如何扩容?

  扩容时因为此时容量已不够用,我们需要重新开辟一块大于当前容量的空间。至于开辟多大的容量,这个我们可以自定义。只要能容纳所插入的值。在vs下每次扩容的大小是之前容量的1.5倍,而在linux g++下每次开辟的容量是之前容量的2倍。开辟新空间后,将原空间的内容拷贝至新空间即可,再将对象中的指针指向新空间,再释放原空间即可即可。此时应该注意,需要进行深拷贝,如果当vector中的元素为string vector时,如果进行是浅拷贝,在析构的时候会发生错误。
<
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值