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

如果有如下定义: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工作的原理究竟是怎样的?

婷婷同学_
浏览 973回答 2
2回答

波斯汪

因为运行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;我机器上的结果是:0038A5880038A5E00038A5E00038A588可以看到,仅仅是交换内指针。这样指向原来内存的迭代器自然不会失效。
打开App,查看更多内容
随时随地看视频慕课网APP