容器适配器

标准库定义了三个顺序容器适配器:stack、queue和priority_queue

容器、迭代器和函数都有适配器,接受一种已有的容器类型,使其行为看起来像一种不同的类型

例如,stack适配器接受一个顺序容器(除array和foward_list),并使其像一个stack


容器适配器支持的操作和类型

size_type 一种类型,保存当前类型的最大对象的大小

value_type 元素类型

container_type 实现适配器的底层容器类型

A a; 创建一个名为a的空适配器

A a(c); 

关系运算符 适配器都支持所有关系运算符:==、!=、<、<=、>、>=这些运算符返回底层容器的比较结果

a.empty()

a.size() 返回a中的元素数目

swap(a,b) 交换a和b的内容,a和b必须有相同类型,包括底层容器类型也必须相同

a.swap(b)


定义一个适配器

定义两个构造函数:

1)默认构造函数创建一个空对象

2)接受一个容器的构造函数拷贝该容器来初始化适配器

satck<int>stk(deq);//从deq(deque<int>)拷贝元素到stk


默认情况,stack和queue基于deque实现,priority_queue是在vector之上实现

stack<string,vector<string>>str_stk;//在vector上实现的空栈
stack<string,vector<int>>str_stk2(svec);//初始时保存svec的拷贝


对于一个给定的适配器,可以使用哪些容器是有限的。

所有适配器要求容器具有添加和删除元素的能力。所以,适配器是不能构造在array,forward_list_上。

stack只要求push_back、pop_back和back操作,可使用除上述两种容器的其他容器构造

queue要求back、push_back、front和push_front,构造于list和deque,但不能为vector

priority_queue要求front、push_back和pop_back操作,还要求随机访问能力,构造于vector或deque,不能基于list构造


栈适配器

s.pop() 删除栈顶元素,但不返回该元素值

s.push(item) 创建一个新元素压入栈顶,该元素通过拷贝或移动item,或者

s.emplace(args) 由args构造

s.top() 返回栈顶元素,但不出栈

我们只能使用是适配器自己的操作,不能使用底层容器的操作


队列适配器

queue和priority_queue适配器定义在queue头文件中

queue默认基于deque实现,priority_queue默认基于vector实现

queue也可以用list和vector实现,priority_queue也可以使用deque实现

q.pop() 返回queue的首元素或priority_queue的最高级优先级的元素,但不删除此元素

q.front() 返回首元素或尾元素,但不删除此元素

q.back() 只适用queue

q.top() 返回最高优先级的元素,但不删除此元素,只适用于priority_queue

q.push(item) 在queue和priority_queue中恰当的位置创建一个元素

q.emplace(args) 其值为item,或者由args构造


标准库queue先进先出的存储和访问策略,priority_queue允许我们为队列的元素建立优先级


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值