1、vector基本概念
vector数据结构和数组非常相似,也成为单端数组
vector与普通数组的区别:数组是静态空间,而vector可以动态扩展。
动态扩展:并不是在原空间之后继续新空间,而是找更大的内存空间,然后将原数据拷贝至新空间。
vector容器的迭代器支持随机访问。
vector构造函数
- vectorv; 采用模板实现类实现,
- vector<v.begin(),v.end()); 将v[begin(),end()]区间中的元素拷贝给本身
- vector(n,elem); 构造函数将n个elem拷贝给本身
- vector(const vector &ver); 拷贝构造函数
vector<int>v1; // 默认无参构造for (int i = 0; i < 5; i++) {v1.push_back(i);}printVector(v1);vector<int>v2(++v1.begin(), v1.end()); // 区间构造printVector(v2);vector<int>v3(10, 100); // 个数 和 赋值printVector(v3);vector<int>v4(v2); // 拷贝构造printVector(v4);
2、vector赋值操作
给vector容器赋值
vector<int>v1; // 默认无参构造for (int i = 0; i < 5; i++) {v1.push_back(i+i%2); //push_back}printVector(v1);//赋值 operator=vector<int>v2;v2 = v1;//assignvector<int>v3;v3.assign(v1.begin(), v1.end());printVector(v3);vector<int>v4;v4.assign(10, 100);printVector(v4);
3、vector容量和大小
- empty(); //判断容器是否为空
- capacity(); //容器的容量
- size(); //返回容器中元素的个数
- resize(int num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置;如果容器变短,则末尾超出容器长度的元素被删除。
- resize(int num,elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置;如果容器变短,则末尾超出容器长度的元素被删除。
vector<int>v1; // 默认无参构造for (int i = 0; i < 5; i++) {v1.push_back(i+i%2); //push_back}printVector(v1);if (v1.empty()) {cout << "容器为空" << endl;}cout << v1.size()<<endl;cout << v1.capacity()<<endl;v1.resize(7);printVector(v1);v1.resize(4, 3);printVector(v1);
4、vector插入和删除
- push_back(elem); //尾部插入元素
- pop_back(); 删除最后一个元素
- insert(const_iterator pos.elem); 迭代器指向位置pos插入元素elem
- insert(const_iterator pos,int count,elem); 迭代器指向位置pos插入元素elem
- erase(const_iterator pos); 删除迭代器从start到end之间的元素
- clear(); 删除容器所有元素
vector<int>v1; // 默认无参构造for (int i = 0; i < 5; i++) {v1.push_back(i+i%2); //push_back}v1.pop_back();v1.insert(v1.begin(), 1);v1.insert(v1.begin(), 1,100);v1.erase(v1.begin());printVector(v1);
5、vector数据存取
- at(int idx);
- operator[];
- front();
- back();
6、vector互换容器
实现容器内元素的交换
vector<int>v1; // 默认无参构造for (int i = 0; i < 5; i++) {v1.push_back(i+i%2); //push_back}printVector(v1);vector<int>v2; // 默认无参构造for (int i = 0; i < 5; i++) {v2.push_back(i + i % 3); //push_back}printVector(v2);v1.swap(v2);printVector(v1);printVector(v2);v1.assign(1000,10);cout << v1.capacity() << endl;v1.resize(3);cout << v1.capacity()<<endl;vector<int>(v1).swap(v1); // 缩小内存空间cout << v1.capacity() << endl;printVector(v1);
7、vector预留空间
减少vector在动态扩展容量时的扩展次数
- reserve(int len); // 容器预留len个元素长度,预留位置不初始化,元素不可访问
v1.reserve(100);