第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 容器适配器 —— stack:栈 queue:队列 priority_queue:优先级队列

容器适配器 —— stack:栈 queue:队列 priority_queue:优先级队列

时间:2021-09-05 21:20:29

相关推荐

容器适配器 —— stack:栈   queue:队列   priority_queue:优先级队列

适配器:使一种事物的行为类似于另外一种事物行为的一种机制

容器适配器:没有自己的数据结构,底层调用其它容器的数据结构,对容器进行包装,使其表现出另外一种行为

标准库提供了三种顺序容器适配器:stack(栈:先进后出)queue(队列:先进先出)priority_queue(优先级队列:按照优先级(“<”号)排序) ,不支持迭代器

使用容器适配器需要的头文件有:

#include<stack>//stack

#include<queue>//queue、priority_queue

默认情况下,栈和队列都是基于deque实现的,而优先级队列则是基于vector实现的。

栈stack的特点是先进后出,所以它可用任意一种顺序容器。

队列queue的特点是先进先出,必须提供pop_front操作,因此不能建立在vector容器上;优先级队列priority_queue,要支持随机访问,所以可建在vector或者deque上,不能建立在list上。

stack提供的操作:

* top():返回一个栈顶元素的引用,类型为 T&。如果栈为空,返回值未定义。

* push(const T& obj):可以将对象副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。

* push(T&& obj):以移动对象的方式将对象压入栈顶。这是通过调用底层容器的有右值引用参数的 push_back() 函数完成的。

* pop():弹出栈顶元素。

* size():返回栈中元素的个数。

* empty():在栈中没有元素的情况下返回 true。

* emplace():用传入的参数调用构造函数,在栈顶生成对象。

* swap(stack<T> & other_stack):将当前栈中的元素和参数中的元素交换。参数所包含元素的类型必须和当前栈的相同。对于 stack 对象有一个特例化的全局函数 swap() 可以使用。

queue提供的操作

* front():返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。

* back():返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。

* push(const T& obj):在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。

* push(T&& obj):以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。

* pop():删除 queue 中的第一个元素。

* size():返回 queue 中元素的个数。

* empty():如果 queue 中没有元素的话,返回 true。

* emplace():用传给 emplace() 的参数调用 T 的构造函数,在 queue 的尾部生成对象。

* swap(queue<T> &other_q):将当前 queue 中的元素和参数 queue 中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板 swap() 来完成同样的操作。

priority_queue 提供的操作

* push(const T& obj):将obj的副本放到容器的适当位置,这通常会包含一个排序操作。

* push(T&& obj):将obj放到容器的适当位置,这通常会包含一个排序操作。

* emplace(T constructor a rgs...):通过调用传入参数的构造函数,在序列的适当位置构造一个T对象。为了维持优先顺序,通常需要一个排序操作。

* top():返回优先级队列中第一个元素的引用。

* pop():移除第一个元素。

* size():返回队列中元素的个数。

* empty():如果队列为空的话,返回true。

* swap(priority_queue<T>& other):和参数的元素进行交换,所包含对象的类型必须相同。

********************************************* 容器的总结 ********************************************

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。