容器适配器是封装容器,使其表现出我们想要的数据结构特性,如栈、队列。
标准库定义了三种适配器:
stack(栈)
- 底层容器:vector,list,默认deque。
- 在stack头文件中。
queue(队列)
- 底层容器:list,默认deque。
- 在queue头文件中。
- FIFO,新元素插在堆尾,从队首删除。
priority_queue(优先队列)
- 底层容器:deque,默认vector。
- 在queue头文件中。
- 元素以<运算来确定优先级
适配器通用操作
size_type //一种类型,足以保存当前类型的最大对象的大小
value_type //元素类型
container_type //实现适配器 的底层容器类型
A a; //创建一个名为a的空适配器
A a(c); //创建一个名为a的适配器,带有容器c的一个拷贝
=、!=、<、<=、>、>= //返回底层容器的比较结果
a.empty(); //是否为空
a.size(); //返回a中的元素数目
swap(a,b); //交换a和b的内容,a和b必须有相同类型,包括底层容器类型也必须相同
a.swap(b);
stack<int> stk(deq) ; //从deq拷贝元素到stk,默认底层容器deque
//在vector上实现的空栈
stack<string, vector<string>> str_stk;
//str_stk2在vector上实现,初始化时保存svec的拷贝
stack<string , vector<string>> str_stk2(svec);
stack操作
s.pop() //弹栈(删除栈顶元素)、不返回该元素值
s.push(item) //压栈item的拷贝,或者
s.emplace(args) //压栈由args构建的元素
s.top() //返回栈顶元素,不弹栈
stack<int> intStack; //空栈,选择默认底层容器
for (size_t ix = 0; ix != 10; ++ix)
intStack.push(ix); //压满栈
while (intStack.empty()){
int value = intStack.top(); //栈顶值
intStack.pop(); //弹栈
}
queue操作
q.pop(); //queue:返回首元素,不删除
//priority_queue:返回最高优先级的元素,不删除
q.front(); //返回首元素,不删除此元素,只适用于queue
q.back(); //返回尾元素,不删除此元素,只适用于queue
q.top(); //返回最高优先级元素,但不删除该元素
//只适用于priority_queue
q.push(item); //queue:在末尾创建一个元素值为item
//priority_queue:恰当的位置创建一个元素,
q.emplace(args); //item由args构造