STL-vector
前言
vector
是什么呢?
vector
是动态数组,就是数组的长度可以变化。
引入vector
的头文件为:
#include <vector>
#include <bits/stdc++.h>//(万能)
定义
vector
的定义方式为:
vector</*数据类型*/> /*名称*/;
比如:
vector<int> vec;
↑这行代码的意思是:定义一个叫vec
的int
类型的动态数组。
插入元素
用push_back(/*元素*/)
可以在动态数组最后插入一个新的元素,比如:
vector<int> vec;//目前:[]
vec.push_back(1);//目前:[1]
vec.push_back(2);//目前:[1, 2]
vec.push_back(3);//目前:[1, 2, 3]
删除元素
如果想删除元素,可以使用pop_back()
删除动态数组中最后一个元素。
⚠注意:这里括号内不要加东西。
⚠注意:如果动态数组内已经为空,再使用
pop_back()
会出错。
举例:
vector<int> vec;//目前:[]
vec.push_back(1);//目前:[1]
vec.push_back(2);//目前:[1, 2]
vec.push_back(3);//目前:[1, 2, 3]
vec.pop_back();//目前:[1, 2]
vec.pop_back();//目前:[1]
vec.pop_back();//目前:[]
vec.pop_back();//出错
访问数组长度
访问数组的长度用/*数组名称*/.size()
,比如:vec.size();
访问动态数组中某个元素跟普通的数组访问方式一样,比如:vec[0]
但是需要注意不要超过数组大小范围,动态数组大小范围为vec.size()-1
输出元素
输出一个动态数组里的所有数据像这样:
vector<int> vec;
for(int i=0; i<vec.size(); i++)
cout<<vec[i]<<" ";
修改数组中的值
想要修改动态数组中的某个值也跟普通数组一样:
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec[0]=2;
vec[1]=1;
清空数组
动态数组清空所有数据且释放内存的格式为:
vector</*数据类型*/>().swap(/*名称*/);
比如:
vector<int>().swap(vec);
清空之后可以使用
/*名称*/.empty()
来检测这个动态数组的大小是否为0。
数组整体赋值
动态数组可以整体赋值,比如:
vector<int> vec1;
vector<int> vec2;
vec1.push_back(1);
vec1.push_back(2);
vec2=vec2;//使vec2与vec1一模一样
数组排序
动态数组的排序需要使用迭代器(vec.begin(), vec.end())
如果全排序则这样:
sort(vec.begin(), vec.end());
如果排序前n个数则这样:
sort(vec.begin(), vec.begin()+n);
数组的数据类型
vector数组的数据类型也可以自定义,比如:
struct Stu{string name; int score;};
int main(void)
{
vector<Stu> vec;
}
自定义结构体数据类型对于动态数组的常见操作:
struct Stu{string name; int score;};
int main(void)
{
vector<Stu> vec;
Stu a;//定义学生a
a.name="abc";//赋值
a.score=100;
vec.push_back(a);//将a压入vec
vec.push_back({"abcd", 90});//或者这样一步完成
}
初始化数组
想将动态数组初始化一个数或数组大小这样:vector</*数组类型*/> /*数组名*/(/*大小*/, /*值*/);
,比如:
int main(void)
{
vector<int> vec(100, 0);
//设置大小为100且所有数为0的动态数组
}