vector常用成员函数
添加头文件并定义:
#include<vector>
vector<int>v;
一.容器构造函数
函数原型:
1.vector<T> v;
采用模板类实现,默认构造函数
2.v.begin();指向容器第一个元素,v.end();指向元素最后一个元素的下一个;
vector(v,begin(),v.end());
将begin(),end()区间的元素拷贝给本身
3.vector(n,elem);
构造函数将n个elem拷贝给本身
4.vector(const vector &v);
拷贝函数
void test01() {
//vector容器构造
vector<int> v1;//默认构造,无参构造
for (int i = 0; i < 10; i++) {
v1.push_back(i);
}
printvector(v1);
//第二种:通过区间方式进行构造:
vector<int>v2(v1.begin(), v1.end());
printvector(v2);
//第三种:n个elem方式构造
vector<int>v3(10, 100);//相当于构造了10个100
printvector(v3);
//第四种:拷贝构造
vector<int>v4(v3);
printvector(v4);
}
二.容器声明及初始化
vector声明
#include <vector>
using namespace std;
int main() {
// 直接声明元素类型为int的vector
vector<int> v1;
// 利用构造函数声明一个长度为5的vector,
vector<int> v2(5);
// 利用构造函数声明一个长度为5,所有值为1的vector
vector<int> v3(5, 1);
// 另一种声明方式
vector<int> v4 = { 4, 5, 6, 7 };
// 也可以这样
int b[4] = { 1, 2, 3, 4 };
vector<int> v5(b + 1, b + 4); // v5元素为 2, 3, 4
return 0;
}
初始化,五中方式
vector<int>vec;
//初始化为空
vector<int>vec(v1);
//用另一个vector来初始化,即构造一个副本
vector<int>vec(n, i);
//大小为n,并全部初始化为元素i (常用)
vector<int>vec(n);
//构造大小为n的容器,没有初始化里面的元素
vector<int>vec{1,2,3,4};
//构造大小为4,并初始化里面的各个元素
三.vector容器的遍历
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void myPrint(int val) {
cout << val << endl;
}
int main() {
//创建vector容器,数组
vector<int> v;
//向容器插入数据
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
//通过迭代器访问容器的数据
//vector<int>::iterator itBegin = v.begin();//起始迭代器 指向容器第一个元素
//vector<int>::iterator itEnd = v.end();//结束迭代器 指向容器最后一个元素的下一个为置
第一种遍历方法
//while (itBegin != itEnd) {
// cout << *itBegin << endl;
// itBegin++;
//}
第二种遍历方法
//for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
// cout << *it << endl;
//}
//第三种遍历方式 利用STL提供的遍历算法 需要加上算法头文件#include<algorithm>
for_each(v.begin(), v.end(), myPrint);
return 0;
}
四.容器的大小以及是否非空
1.获取容器元素个数:size();//返回容器的中的元素个数,与capacity区分开来
int len=v.size();
2.判断容器是否为空:empty();
3.capacity();容器的容量
4.resize(int num);
重新指定容器长度为num。若容器变长,则以默认值填充新位置;
如果变短,则超出容器的不分被删除。
5.resize(int num,elem);
重新定义容器长度为num.如果容器边长,则以elem填充新位置,
如果变短,则超出容器的不分被删除。
五.容器的插入与删除
1.push_back(num);
在最后添加num元素
2.top_back();
删除最后一个元素
3.insert函数(不常用)
-
插入元素,传参方式一般有三种
-
时间复杂度和erase同理,$O(n)$
vector<int> v = {0, 1, 2, 3, 4};
int b[4] = {9, 8, 7, 6};
v.insert(v.begin() + 1, 5); // 往第2个元素后面后插入一个5
// 此时v为 0, 5, 1, 2, 3, 4
v.insert(v.begin() + 2, 2, 6); // 往第3个元素后面插入两个6
// 此时v为 0, 5, 6, 6, 1, 2, 3, 4
v.insert(v.begin() + 3, b + 1, b + 3); // 往第4个元素后面插入数组b中下标从1~2的数
// 此时v为 0, 5, 6, 6, 8, 7, 1, 2, 3, 4
4.erase函数(不常用)
-
删除vector内部的元素
-
传入需要删除的起始指针和结束指针的下一个位置
-
时间复杂度$O(n)$,因为他的原理就是删除后将后面的元素往前移动
vector<int> v = {0, 1, 2, 3, 4, 5, 6};
v.erase(v.begin() + 1, v.begin() + 4); // 删除[1, 4)范围的下标,主要左闭右开即[1, 3]
for (int x : v) cout << x << ' '; // 输出为:0 4 5 6
5.clear()函数
作用:删除容器内所有元素