1.动态数组vector
1.头文件
#include< vector>
2.构造方式
vector< int> vec //名为vec的int类型的动态数组,int可替换为其他元素类型
3.功能
(1)插入元素
vec. push_back(1) //插入内容为1
长度为n,内容全是1的动态数组:
vector< int>vec;
vec.push_back(1);
(2)获取长度并访问元素
vec .size() //获取长度
vec[i] //访问第i个元素
(3)修改元素
vec[i]=1 //给vec第i个元素赋值为1
(4)删除元素
vec .pop_back() //删除最后一个元素
(5)清空
清空内容但不清空内存:
vector<int>().clear() //int可换为其他类型
清空内存:
vector<int>().swap(vec) //int可换为其他类型,vec为数组名称
方法总结
方法 | 功能 |
---|---|
push_back | 在末尾加入一个元素 |
pop_back | 在末尾弹出一个元素 |
size | 获取长度 |
clear | 清空 |
4.二维数组
(1)构建动态数组:
vector<vector< int> >vec2
!空格不能丢!
(2)构建n行m个的动态数组:
vector<vector<int> >vec2(n,vector<int>(m,0)) //老样子,int可换,vec2是名称
(3)插入元素:
push_back
(4)访问元素:
名称[i]
(同上了)
2.集合set
1.引用库:
#include<set>
2.构建集合:
set<int> s //int可换,s是名称
3.功能:
(1)插入元素:
s.insert("1") //向s内插入1
(2)删除元素:
s.erase("1”)
(3)判断元素是否存在:
s.count("1")
(4)迭代器:
set<int>::iterator s
空格依然不能丢
s.begin() 为起始元素的迭代器
s.end() 为尾后迭代器
注:set自动从小到大遍历
(5)清空:
s.clear() //同时清空内容和内存
set与结构体结合:
3.映射map
1.引用库:
#include<map>
2.构造map:
map<类型1,类型2> 名称; 如:
map<string,int> m;
3.功能
(1)插入映射:
头文件:
#include<utility>
插入内容:
pair<string,int>p;
make_pair(v1,1)
注:如果之前插入的key已经存在了,则新插入的value无效
(2)访问映射
获取value:
m["1"]
注:若没有对key做过映射,则自动生成映射,value为默认值(int型为0,string为空字符串)
不用insert插入pair的方法:
m["v2"]=2
迭代器:
注:map按关键字从小到大遍历
清空:
clear()
map常用函数总结:
函数 | 功能 |
---|---|
insert | 插入一对映射 |
count | 判断关键字是否存在 |
size | 获取映射对个数 |
clear | 清空 |
二维map
map套用set
构造:
map<int,set<string> > s
空格不能少!!!
map套用map
构造:
map<int,map<string,int> > s
4.队列queue
1.引用库
#include<queue>
2声明
queue<int> q;
3.用法
q.front(); //获取队首
q.back(); //获取队尾
q.push(x); //插入元素,x表示要插入的值,什么都行(但是类型必须和定义的相同)
q.pop(); //将队头弹出,无返回值
q.size(); //返回队列里有多少个元素
q.empty(); //如果队列为空,返回true,否则返回false( 等同于q.size()==0 )
q.swap(q2); //交换q和q2里面的值(q2需要和q是一个类型)
5.大顶堆和小顶堆
大顶堆:
priority_queue <int,vector<int>,greater<int> > q;
小顶堆:
priority_queue<int,vector<int>,less<int> >q;
用法同队列