栈
//1.头文件
#include <stack>
//2.声明
stack<int> s; //声明栈内元素都是int类型一个栈s
//3.操作
s.push(1); //在栈s顶插入元素1
s.pop(); //删除栈s的顶部元素
s.top(); //获取栈顶元素的值
s.size(); //求栈的大小
s.empty(); //判断栈是否为空
队列
//1.头文件
#include <queue>
//2.声明
queue<int> q; //声明队列内元素都是int类型一个队列q
//3.操作
q.push(1); //在队尾顶插入元素1
q.pop(); //删除队尾元素
q.front(); //获取队头元素的值
q.back(); //获取队尾元素的值
q.size(); //求队列大小
q.empty(); //判断队列是否为空
优先队列
//1.头文件
#include <queue>
//2.声明--默认为大顶堆
priority_queue<int> q; //默认大顶堆
priority_queue<int, vector<int>, greater<int> > q; //指定堆的类型为小顶堆
priority_queue<int, vector<int>, less<int> > q; //指定堆的类型为大顶堆
//3.操作
q.push(1); //在堆内插入元素1且仍保持堆的结构
q.pop(); //弹出堆顶元素
q.top(); //获取堆顶元素的值
pair
//1.头文件
#include <utility>
//2.声明
pair<string, int> p; //声明第一个元素为string类型,第二个元素为int型的对
//3.操作
p.first; //访问p的第1个元素
p.second; //访问p的第2个元素
//pair支持比较操作,默认以first为第一关键字,second为第二关键字
vector容器
//1.头文件
#include <vector>
//2.声明
vector<int> vec; //声明元素int型vector对象,该对象大小为0,容器内无任何元素
vector<int> vec(100); //声明含有100个元素,初值为0的int型vector对象
vector<int> vec(100,2); //声明含有100个元素,初值为2的int型vector对象
//3.操作
vec.push_back(1); //在向量vec末尾插入元素1
vec.insert(vec.begin()+i,1); //在第i个元素后面插入1(在下标为i的地方插入1,剩余元素后移)
vec.erase(vec.begin()+2); //删除第三个元素(删除下标为2的元素)
vec.erase(vec.begin()+i,vec.begin()+j); //删除下标i~j的元素
vec.size(); //求向量大小
vec.clear(); //清空向量
//4.访问vector中的元素
vec[i]; //使用下标访问元素(同数组)
//使用迭代器访问vector中的元素
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;`
注:vector中的元素是结构体时,要将结构体定义为全局的,否则会出错。
map
map的本质是一棵红黑树
//1.头文件
#include <map>
//2.声明
map<string, int> m; //声明关键字为string型,对应的值int型的对
//3.操作
m["aaa"]=1; //字符串"aaa"的值为1
unordered_map
unordered_map的本质是哈希表
//1.头文件
#include <unordered_map>
//2.声明
unordered_map<string, int> m; //声明关键字为string型,对应的值int型的对
//3.操作
m["aaa"]=1; //字符串"aaa"的值为1
m.count("aaa"); //查询m中是否存在值为“aaa”的元素
字符串string
//1.头文件
#include <string>
//2.声明
string str; //声明一个字符串str
//3.操作
str.insert(2,"abc"); //在下标为2的位置之前插入"abc"
str.erase(2); //删除从下标2开始的之后的所有元素
str.erase(2,1); //删除下标从2开始的一个的元素
str.find('A'); //从头查找字符'A',返回'A'在str中首次成功的位置,若失败,则返回-1
其它常用辅助函数
//头文件
#include <algorithm>
//1.sort排序
sort(a.begin(), a.end());
//2.reverse翻转数组
reverse(a.begin(), a.end());
//头文件
#include <cstring>
//3.memset数组初始化函数,将某一块内存全部填充为指定的值
memset(f, -1, sizeof(f));