vector容器:
1.vector基本概念:
vector功能与数组类似,与数组不同的是,vector可以动态扩展。
2.vector构造函数:
vector<T> v; //默认构造函数,创建数据类型T的容器
vector(v.begin(), v.end()); //将v[begin(), end()) 区间中的元素拷贝给本身
vector(n, elem); //将n个elem拷贝给本身
vector(const vector &vec); //拷贝构造函数
vector<int> v1;vector<int> v2(v1.begin(), v1.end());vector<char> v3(10, 'a');vector<int> v4(v1);
3.vector赋值操作:
vector& operator=(const vector& vec); //等号重载
assign(beg, end); //将beg, end之间的数据拷贝赋值给本身
assign(n, elem); //将n个elem拷贝赋值给本身
vector<int> v2;v2 = v1;vector<int> v3;v3.assign(v1.begin(), v1.end());vector<int> v4;v4.assign(10, 100);
4.vector容量和大小:
empty( ); //判断容器是否为空
capacity( ); //容器的容量
size( ); //容器中元素的个数
resize(int num); //重新指定容器的长度为num,容器变长,以默认值填充新位置,容器变 //短,超出的元素被删除
resize(int num, elem); //重新指定容器的长度为num,容器变长,以elem填充新位置,容器变短, //超出的元素被删除
void test03()
{vector<int>v1;for (int i = 0; i < 10; i++){v1.push_back(i);}if (v1.empty())//为真,代表容器为空{cout << "v1为空" << endl;}else{cout << "v1不为空" << endl;cout << "v1容量为:" << v1.capacity() << endl;cout << "v1大小为:" << v1.size() << endl;}PrintVector(v1);//重新指定大小v1.resize(15);PrintVector(v1);//默认值为0 v1.resize(5);PrintVector(v1);//后面的被删掉了
}
5.vector插入和删除:
void test04()
{vector<int>v1;v1.push_back(10);v1.push_back(20);v1.push_back(30);PrintVector(v1);//10 20 30v1.pop_back();//10 20 尾部删除v1.insert(v1.begin(), 100);//100 10 20 指定位置插入v1.insert(v1.begin(), 2, 50);//50 50 100 10 20 指定位置插入v1.erase(v1.begin());//50 100 10 20 指定位置删除v1.erase(v1.begin(), v1.end()); //指定范围删除v1.clear();//清空所有数据
}
6.vector数据存取:
at(int idx); //返回idx所指的数据
operator[ ]; //下标重载,返回idx所指的数据
front( ); //返回第一个数据
back( ); //返回最后一个数据
void test05()
{vector<int>v1;for (int i = 0; i < 10; i++){v1.push_back(i);}cout << v1.front() << " " << v1.at(1) << " " << v1[2] << " " << v1.back() << endl;//0 1 2 9
}
7.vector互换容器:
功能:实现两个容器内元素的互换。
swap(vec); //将vec与本身的元素互换
v1.swap(v2);//交换两个容器的元素
用途:巧用swap可以收缩内存空间:
resize缩小空间后,只是将size减小了,capacity并没有减小,造成了空间浪费。
解决方法:
vector<int>(v1).swap(v1);
原理:vector<int>(v1) --- 匿名对象,按照v的size开辟大小
.swap(v1) --- 将匿名对象和v1交换
8.vector预留空间:
功能:减少vector在动态扩展内存时的扩展次数。
reserve(int len); //容器预留len个元素长度,预留位置不初始化,元素不可访问。
void test07()
{vector<int>v;v.reserve(100000);int num = 0;int* p = NULL;for (int i = 0; i < 100000; i++){v.push_back(i);//查看动态扩展的次数if (p != &v[0]){p = &v[0];num++;}}cout << num << endl;//1
}