实战c++中的vector系列--可怕的迭代器失效(vector重新申请内存)

vector给我们提供了很多的方便,但是偶尔也会有陷阱。当不注意的时候,就掉入其中。说到底,还是对vector的机制不够彻底掌握。

很轻松的写下这段代码:

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    vector<int> v;
    v.push_back(1);

    std::vector<int>::iterator iter1 = v.begin();
    v.push_back(1);

    int n = *iter1;//shit
    cout << n << endl;
    return 0;

}

上面的代码运行时崩溃,就是因为迭代器iter1在vector push_back新值后失效了。切记!
但是为什么会失效?
如果我先预先resize足够大,那么会如何呢?

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    vector<int> v;
    v.resize(4);
    v.push_back(1);

    std::vector<int>::iterator iter1 = v.begin();
    v.push_back(1);
    int n = *iter1;
    cout << n << endl;
    return 0;

}

上面的代码正常运行,因为之前resize了足够的空间,即迭代器不会失效。
我们就已给vector push_back两个元素为例。resize(1), resize(2), resize(3)程序还是会崩溃。还是容量不足,导致vector重新分配内存,而导致迭代器失效。

之前讲过了resize与reserve的区别,那么上面的代码如果使用reserve呢?

#include<iostream>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一苇渡江694

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值