队列(queue)的基本用法
q.front(); //返回队头元素的引用
q.back(); //返回队尾元素的引用
q.empty(); //判断队列是否为空
q.size(); //返回队列中元素的个数
q.emplace();//在队尾插入元素
q.pop(); //删除队头元素
q.push(); //在队尾插入元素
q.swap(); //交换两个队列中的元素
注意:push()与emplace()函数同样是在队列尾部插入元素,但emplace()相当于将原料直接加工成产品插入队列,而push()则是将原料加工成产品后再将该产品复制一份插入到队列中,因此emplace()较push()更为节省空间。
swap()交换的两个队列元素类型必须相同。
优先队列(priority_queue)的基本用法
pq.top(); //访问对头元素
pq.pop(); //弹出对头元素
pq.push(); //插入队列到队尾并排序
pq.emplace(); //原地构造一个元素插入队尾
pq.empty(); //判断队列是否为空
pq.size(); //返回队列元素个数
pq.swap(); //交换两队列内容
优先队列定义时,priority_queue<类型> name 默认是降序排列;
定义:priority_queue<Type, Container, Functional> Type 就是元素类型, Container是必须用数组实现的容器如 deque,vector , Functional是要实现的排序规则。如:
priority_queue<int, vector< int >, greater< int >>:升序排列(小顶堆)
priority_queue<int, vector< int >, less< int >>:降序排列(大顶堆)
总结
队列与优先队列与栈(stack)一样都是无法使用迭代器的,因为在其定义就是队头出,队尾进,即无法随机访问队列元素,因而就无法使用迭代器。
队列是 first int first out (先进先出) 优先队列 first in largest out (优先级高先出),可见优先队列是定义了优先级的队列,而优先队列在插入元素后都会自动按优先级高低自动进行排序。
优先队列中没有front(), back() 等可以直接访问队头、尾的成员函数,但是有top()类似与栈的成员函数。