STL总结
栈(stack)
基本定义
栈(stack
)又名堆栈,是一种只允许在同一端进行数据插入和删除操作的特殊线性表。
栈的相关概念
栈顶(
top
):表尾,栈中允许进行数据插入和删除的一端。栈底(
bottom
):表头,栈中不允许进行数据操作的一端。入栈或进栈(
push
):将数据插入栈顶。出栈或退栈(
pop
):将数据取出栈顶并删除。栈上溢(
full
):栈内空间已满时,仍进行入栈操作,是一种空间不足的出错状态。栈下溢(
empty
):栈内无数据时,仍进行出栈操作,是一种数据不足的出错状态。空栈:元素个数为零的栈。
栈的常用操作
头文件
1 |
构造stack容器
基本语法:stack <Type> s
1 | stack <int> s; //声明存储int类型数据的栈 |
返回栈顶元素
基本语法:s.top()
1 | s.top(); //返回栈顶元素 |
返回栈的大小
基本语法:s.size()
1 | s.size(); //返回栈的大小 |
判断栈是否为空
基本语法:s.empty()
1 | s.empty(); //如果栈为空返回true,否则返回false |
入栈操作
基本语法:s.push(elem)
1 | s.push(1); //向栈顶插入元素1 |
出栈操作
基本语法:s.pop()
1 | s,pop(); //取出栈顶元素并将其删除 |
队列(queue)
基本定义
队列是一种特殊的线性表,是一种先进先出的数据结构。它只允许在表的前端(front
)进行删除操作,而在表的后端(rear
)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
栈的常用操作
头文件
1 |
构造queue容器
基本语法:queue <Type> q
1 | queue <int> q; //声明存储int类型数据的队列 |
返回队首元素
基本语法:q.front()
1 | q.front(); //返回队首元素 |
返回队尾元素
基本语法:q.back()
1 | q.back(); //返回队尾元素 |
返回队列的大小
基本语法:q.size()
1 | q.size(); //返回队列的大小 |
判断队列是否为空
基本语法:q.empty()
1 | q.empty(); //如果队列为空返回true,否则返回false |
入队操作
基本语法:s.push(elem)
1 | s.push(1); //向队尾添加元素1 |
出队操作
基本语法:s.pop()
1 | s,pop(); //从队尾移除第一个元素 |
pair
基本定义
pair
可以将两个元素绑定在一起作为一个合成元素,可以节省编码时间。
栈的常用操作
头文件
1 |
由于map
的内部实现中设计pair
,就不需要额外再去添加utility
头文件了。
1 |
构造pair容器
基本语法:pair <Typename1,Typename2> p
1 | pair <int,float> p; |
初始化
基本语法:pair <Typename1,Typename2> p(Value1,Value2)
1 | pair <int,float> p(100,3.14); |
元素访问
可以把pair
定义过的东西看作一个二元结构体,该结构体中的两个元素分别是first
和second
,基本语法:p.first
p.first
1 | pair <int, float> p(100, 3.14); |
对变量进行赋值
如果使用pair
定义了一个变量,对其赋值需要使用make_pair
函数(利用结构体的写法分别对其first和second赋值也是可以的),基本语法:make_pair(Value1,Value2)
1 | pair <int, float> p; //定义p |
比较大小
两个pair
类型之间可以进行大小比较,比较规则是先以first
的大小作为标准,只有当first
相等时才会判别second
大小。