一.了解STL
STL 即标准模板库(Standard Template Library),是“容器”的集合
STL核心库的基本概念有三个:容器(Containers),迭代器(iterators),算法(Algorithms)
STL内的所有组件都由模板(Template)构成,其元素可以是任意类型
STL容器:
常用顺序容器 | vector,deque,list |
常用关联容器 | set,map |
容器适配器 | stack,queue,priority_queue |
常用的就是 vector(向量) 了
容器,听名字就能知道,这是和int a[100]之类的数组差不多的东西,vector就是一种数组
一个动态数组
动态数组顾名思义是一个元素个数可变的数组
他在定义的时候可以不需要像静态数组(int a[100]之类的)提前定义数组的空间
可以在后面的程序里直接往这个数组里塞数据 :P
二.定义vector
首先我们应该知道如何定义vector数组
在定义前,我们需要一个 #include<vector> 头文件
#include<vector>
之后。定义一个vector数组需要
vector<int> a;//a为数组(容器)名
一个int类型的vector数组就定义好了
我们还有其他构造vector容器的方式,比如:
vector<int> b(n);//定义一个元素个数为n的int类型的vector(数组内默认值为0)
vector<int> c(n,m);//定义一个元素个数为n,且元素都为m的int类型vector
比如vector<int> a(5);
就创建了一个int类型的元素个数为5的vector,因为没有定义,所以这里面的元素都为0
如果我们想定义vector里的初始值
我们可以用vector<int> a(5,8);
这样就创建了一个元素个数为5,且元素都为8的int类型的vector
当然不是定义了就只有这么多的元素,它毕竟是动态数组,可以在后面的程序插入元素 :L
三.vector的函数
1.获取数组长度
之后我们可以使用 数组名.size() 来查看一个容器中实际元素的个数
就像这样:
printf("%d",a.szie());//返回为0
printf("%d",b.szie());//返回为5
printf("%d",c.szie());//返回为5
我们这个新定义的vector a中什么也没有,故a.size()返回的值是0
vector b 与 vector c前面定义了元素个数为5,故返回值都是5
2.存放数据
之后,我们拿他们肯定是用来存数的
可是怎么存数?
不是像静态数组直接使用下标输入
在定义vector a时,我们可以看到没有任何定义数组大小的地方
所以就不能使用下标直接把数据存进去
把一个数据放进这样一个vector数组中
我们可以用push_back()函数
像这样:
a.push_back(10);
我们就把一个数字10放进了数组a的末尾
那么这样,a.size()返回的值就是1了,因为数组中有10这1个元素;
同理 如果对vector b或c进行push_back(10) 函数操作 就会把数字10放入b或c的末尾
b 和 c的size()返回值就是6了;
:D
3.访问数组内的数据
在vector有了数据之后
就可以像静态数组一样使用下标访问了
be like:
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a;
a.push_back(10);
a.push_back(20);
a.push_back(30);
for(int i=0;i<a.size();i++)
{
cout<<a[i]<<" ";
}
return 0;
}
:P
4.插入、删除、获取头尾元素
想批量插入或删除vector中的元素?
可以使用insert和eraser函数
获取头尾元素可以使用.front和.back函数
insert函数的使用方式是:insert(位置头,位置尾,元素)
eraser函数的使用方式是:eraser(位置头,位置尾)