C++标准模版库STL
在C语言中,很多东西都需要自己实现,例如用数组模拟栈和队列等等有些复杂的操作实现起来会非常麻烦。
因此,C++提供了标准模板库(Standard Template Library,STL),其中封装了很多非常实用的容器,不需要费力去实现他们的细节而直接调用函数来实现很多功能,十分方便。例如,string其实就是STL中的一个容器。
栈和队列
栈
栈(stack)又称堆栈,是只能在某一端插入和删除的特殊线性表。具有先进后出(FILO,first in last out)的特性。
stack的定义
stack<typename\> name;
stack常用函数
push(x):将x入栈,时间复杂度为O(1)
pop():弹出栈顶元素,时间复杂度为O(1)
top():获得栈顶元素,时间复杂度为O(1)
empty():判空,true为空,false为非空,时间复杂度为O(1)
size():返回栈内元素个数,时间复杂度为O(1)
队列
队列(queue)是线性表的一种,具有先进先出(FIO,first in first out)的特性。使用队列存取数据元素时,数据元素只能从表的一端进入队列,另一端出队列。
queue的定义
queue<typename\> name;
queue常用函数
push(x):将x入队
pop():弹出队首元素
front():获得队首元素
back():获得队尾元素
empty():判空,true为空,false为非空
size():返回队列内元素个数
优先队列
优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中优先级最大的元素总是位于队首。
通俗来讲:通过优先队列可以实现快速获取极值<最大、最小>
优先队列的定义
priority_queue<int, vector<int>, greater<int> > q1;
//这里需要一个空格,避免识别成>>位移运算符
priority_queue<int, vector<int>, less<int> >q1 等价于
priority_queue<int> q1
优先队列元素为结构体类型时的运算符重载
元素的比较规则默认按元素值由大到小排序,可以重载”<“操作符来重新定义比较规则。
结构体优先队列:
struct node {
int x, y;
friend bool operator < (node a, node b) {
return a.x > b.x; //结构体中,x小的优先级高
}
};
priority_queue<node>q; //定义方法
//通过自定义operator<操作符来比较元素中的优先级。
优先队列常用函数
push(x):将x入队
pop():弹出队首元素
front():获得队列中优先级最高的元素
empty():判空,true为空,false为非空
size():返回队列内元素个数