[C++]vector:迭代器失效和vector<string>中更深层次拷贝的问题

一、迭代器失效的两大类型

异地扩容后的失效

  • 在vector容器中,通常情况下的扩容都是异地扩容,例如resize, reserve,但是这个行为不会改变迭代器指向的位置,因此直接异地扩容会导致迭代器的失效

原地删除后的失效

  • 如果是原地删除,例如erase:erase的逻辑是删除某一个数的位置,让这个数往后的位置都往前挪一个位置,这种行为看起来迭代器貌似没有失效,但:
    如果删除的是最后一个位置,那么:

    在vs平台下,如果不接受erase后返回的值,将会强制检查强制报错
    在linux平台下,编译器不会报错,但是这种行为一是会留下安全隐患(越界问题),二是没有可移植性

二、vector出现的深层次拷贝问题

如图:我们扩容了一个vector<string>类型的对象
但是可以看到,新的对象的string类型。指向的是原对象的string类型的值,这是属于浅拷贝的问题

  • 解决方法是:
	for(size_t = 0; i < size(); i++)
	{
		tmp[i] = _start[i]; 这里使用自定义类型的赋值(深拷贝赋值)
					   	 	就算是内置类型,也可以一样赋值
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值