容器适配器时基于容器实现的新容器.
容器是配置分为三种
stack
头文件:#include <stack>
对应数据结构中的栈,有先进后出的特性.
来自deque,,可用顺序容器vector,list,deque.
queue
头文件:#include <queue>
对应数据结构中的队列,有先进先出的特性.
来自deque,可用顺序容器list,deque.容器必须提供前插(push_front())运算
priority_queue
头文件:#include <queue>
它是一个带优先级的队列,可以按照某种优先级顺序进行删除.
来自vector,可用顺序容器vector,deque,容器必须提供随机访问功能.
提供了top访问下一个元素,默认从大到小顺序进行删除.
stack
允许在顶部插入删除,不能访问中间元素.
没有迭代器,遍历可以弹出访问栈顶元素(也不支持下标操作)
stack<int> s;
stack<int,deque<int>> s; //两个等价的
//要从vector衍生stack可以
stack<int,vector<int>> s;
成员函数
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int> s;
//判断栈是否为空
if (s.empty())
{
cout << "is empty" << endl;
}
//栈顶插入元素
s.emplace(1); //C++11
s.push(2);
//返回栈顶元素
cout << s.top() << endl; //2
//栈中的元素个数
cout << s.size() << endl; //2
//删除栈顶元素
s.pop();
cout << s.top() << endl; //1
//交换两个stack
stack<int> s2;
s2.emplace(4);
s2.emplace(8);
s2.emplace(9);
s2.emplace(2);
s.swap(s2);
cout << s.size() << endl; //4
cout << s2.size() << endl; //1
return 0;
}
queue
队尾插入,队首删除,同样不能访问中间元素,并且没有迭代器.
成员函数
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<int> q;
//判空
if (q.empty())
{
cout << "is empty" << endl;
}
//队尾插入元素
q.push(1);
q.emplace(2);
//返回队首元素
cout << q.front() << endl; //1
//返回队尾元素
cout << q.back() << endl; //2
//返回当前元素个数
cout << q.size() << endl; //2
//删除队首元素
q.pop();
cout << q.size() << endl; //1
cout << q.front() << endl; //2
queue<int> q2;
q2.emplace(1);
q2.emplace(2);
q2.emplace(3);
q2.emplace(4);
q2.emplace(5);
//交换两个容器
q.swap(q2);
cout << q.size() << endl; //5
cout << q2.size() << endl; //1
return 0;
}
priority_queue
不同于,最大元素是队首,可以排序,默认升序.
没有front和back
成员函数
#include <iostream>
#include <queue>
using namespace std;
int main()
{
priority_queue<int> q;
//判空
if (q.empty())
{
cout << "is empty" << endl;
}
//添加元素
q.push(4);
q.emplace(2);
//返回最大元素
cout << q.top() << endl; //4
//返回元素个数
cout << q.size() << endl; //2
//删除最大元素
q.pop();
cout << q.top() << endl; //2
return 0;
}