一,vector
vector可以理解为一个边长数组,可以存储不同的类型,int ,double,char,结构体等。
也可以才能出STL标准容器,如set,string,vector等
二,构造函数
vector(size_t n,T val) //用n个T类型的val初始化
vector(InputIterator first,InputIterator last) //用迭代器区间[first,last)初始化
vector(const vector& x) //复制出一份x
void Tets_vector1()
{
vector<int> v1(5, 1); //1 1 1 1 1
vector<int> v2(v1); //1 1 1 1 1
vector<int> v3(v1.begin(), v1.end()); /1 1 1 1 1
}
三,初始化方法
1,使用圆括号赋值
也就是调用构函数
vector<int> v(5, 1);
for (auto x : v)
cout << x << " ";
//输出 1 1 1 1 1
2,使用花括号赋值
vector<int> v2{ 1,2,3,4,5 };
for (auto x : v2)
cout << x << " ";
cout << endl;
//输出1 2 3 4 5
四,元素访问(遍历)
可以使用[ ]进行下标直接访问和遍历,也可以使用迭代器进行访问和遍历
void Test_vector2()
{
//下标
vector<int> v(5, 1);
for (int i = 0; i < v.size(); i++)
cout << v[i] << " ";
cout << endl;
//迭代器
vector<int>::iterator it = v.begin();
while (it != v.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
五,常用函数
1,push_back
**v.push_back(x),**就是在vector容器后面添加一个元素x,时间复杂度为O(1)
void Tets_vector4()
{
vector<int> v;
for (int i = 0; i < 3; i++)
v.push_back(i);
for (auto x : v)
cout << x << " ";
cout << endl;
}
2,insert()
void insert(iterator it,T val) //在迭代器处插入值val
void insert(iterator it,InputIterator first,InputIterator last) //在迭代器it前插入区间[first,last)
iterator insert(iterator,size_t n,T val) //在迭代器处插入n个val
void Tets_vector4()
{
vector<int> v{ 1,2,3,4,5 };
v.insert(v.begin(), 6); //1前插入6
for (auto e : v)
cout << e << " ";
cout << endl;
vector<int> v1{ 8,9 };
v1.insert(v1.begin(), v.begin(), v.end()); //开始位置前插入V
for (auto e : v1)
cout << e << " ";
cout << endl;
v1.insert(v1.begin(), 3, 5); //开始位置前插入3个5
for (auto e : v1)
cout << e << " ";
cout << endl;
}
3,pop_back()
**pop_back()**可以删除vector尾部的元素,时间复杂度为O(1)
void Tets_vector5()
{
vector<int> v{ 1,2,3,4,5 };
v.pop_back();
for (auto e : v)
cout << e << " ";
cout << endl;
}
4,size(),capacity()
**size()**用来获取vector容器的元素个数,时间复杂度为O(1),size()返回类型为size_t。
**capacity()**用来获取vector容器的容量大小,时间复杂度为O(1),capacity()返回类型为size_t.
5,resize()
**resize()**用来调整size()的。
resize(size_t n,T val)
//开辟n个空间,并初始化为val
//如果之前有空间,就会将空间大小调整到n,并将新开的空间初始化为val,原先的值不变
void Tets_vector7()
{
vector<int> v{ 1,2,3,4,5 };
v.resize(8, 1);
for (auto e : v)
cout << e << " ";
cout << endl;
}
6,clear()
**clear()**用来清空vector中的所有元素,时间复杂度为O(N),N为vector中的元素个数:
void Test_vector8()
{
vector<int> v;
for (int i = 1; i <= 3; i++)
v.push_back(i);
cout << v.size() << endl;
v.clear();
cout << v.size() << endl;
}
7,erase()
**erase()**有两种用法:删除单个元素、删除一个区间内所有元素。时间复杂度为O(N)。
1,删除单个元素
erase(it) //删除迭代器处的元素
void Test_vector9()
{
vector<int> v{ 1,2,3,4,5 };
for (auto e : v)
cout << e << " ";
cout << endl;
v.erase(v.end() - 2);
for (auto e : v)
cout << e << " ";
cout << endl;
}
输出结果
1 2 3 4 5
1 2 3 5
2,删除一个区间的所有元素
erase(first, last) 即删除**[first, last)**内的所有元素:
void Test_vector10()
{
vector<int> v;
for (int i = 1; i <= 5; i++) {
v.push_back(i); //将1、2、3、4、5 依次插入v的队尾
}
v.erase(v.begin() + 1, v.begin() + 3); //删除2和3
for (auto it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
}
输出结果
1 4 5