为了账号安全,请及时绑定邮箱和手机立即绑定

为什么swap函数(STL)不会使迭代器失效?

为什么swap函数(STL)不会使迭代器失效?

婷婷同学_ 2019-02-04 09:05:08
如果有如下定义:vector<string> svec1(10);vector<string> svec2(24);svec1.swap(svec2);执行后,svec1中有24个元素,但svec1中原来只有10个元素,系统原来给svec1分配的内存空间可能不足保存24个元素,当不足时,不是要为svec1重新分配内存空间吗?(虽然在交换之前,系统给svec1分配大于可以保存10个元素的内存空间,但有vector<string> svec1(10);vector<string> svec2(1000);svec1.swap(svec2);时,迭代器还是不会失效。为什么会这样?swap工作的原理究竟是怎样的?
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

因为运行swap函数的时候,仅仅是交换vector对象当中的指针,并没有重新分配内存
你在机器上做如下实验:
vector<int> v1(10,1);
vector<int> v2(100,2);
cout<<&v1[0]<<endl;
cout<<&v2[0]<<endl;
v1.swap(v2);
cout<<&v1[0]<<endl;
cout<<&v2[0]<<endl;
我机器上的结果是:
0038A588
0038A5E0
0038A5E0
0038A588
可以看到,仅仅是交换内指针。
这样指向原来内存的迭代器自然不会失效。



查看完整回答
反对 回复 2019-03-22
  • 2 回答
  • 0 关注
  • 911 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信