vector容器互换
功能描述:
实现两个容器内元素进行互换
函数原型:
swap(vec);//将vec与本身的元素互换
1.基本使用
代码如下:
#include <iostream>
using namespace std;
//vector容器互换
#include <vector>
//1.基本使用void printVector(vector<int >v) {for (vector<int >::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}void test01() {vector<int >v1;for (int i = 0; i < 10; i++) {v1.push_back(i);}cout << "互换前:" << endl;printVector(v1);vector<int >v2;for (int i = 10; i > 0; i--) {v2.push_back(i);}printVector(v2);v1.swap(v2);cout<<"互换后:"<<endl;printVector(v1);printVector(v2);}int main() {test01();return 0;
}
2.实际用途
巧用swap可以收缩内存空间
当我们重新指定大小的时候,vector容器的容量(capacity)不会变化,如果刚开始给vector容器push_back很多元素,后面resize时又将它变得很小,这个时候vector的size虽然变了,但是capacity是不会变的,这样就会浪费内存空间,我们可以巧用swap解决这个问题
代码如下:
#include <iostream>
using namespace std;
//vector容器互换
#include <vector>
//2.实际用途void printVector(vector<int >v) {for (vector<int >::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}void test01() {vector<int >v;for (int i = 0; i < 100000; i++) {v.push_back(i);}cout << "v的容量" << v.capacity() << endl;cout << "v的大小" << v.size() << endl;v.resize(3);//重新指定大小cout << "v的容量" << v.capacity() << endl;cout << "v的大小" << v.size() << endl;//巧用swap收缩内存vector<int>(v).swap(v);cout << "v的容量" << v.capacity() << endl;cout << "v的大小" << v.size() << endl;}int main() {test01();return 0;
}
vector(v).swap(v);
为什么可以收缩空间呢?
vector < int > (v) :
用v目前所用元素个数来初始化匿名对象
那当我们使用了swap(v)//容器交换后
等vector< int >(v).swap(v)这行代码执行完,编译器就会自动回收匿名对象,所以那块很大的内存就会被回收,不再占用空间