C++容器库(第三篇:栈和队列)
栈
基础介绍
- 头文件:
#include<stack>
- 初始化:
stack<int> a
- 相关用法:
用法 | 代码 |
---|
将x入栈 | a.push(x); |
获取栈顶元素 | a.top(); |
将x入栈 | a.push(x); |
将x入栈 | a.push(x); |
出栈操作 | a.pop(); |
判断栈空 | a.empty |
获取栈长 | a.size() |
交换a、b栈 | a.swap(b); |
其余用法可参考:https://zh.cppreference.com/w/cpp/container/stack
使用方法(缺点:输出后不能保留元素)
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<int> a;
for(int i:{1,2,3,4,5}) a.push(i);
cout<<"栈a的长度为:" <<a.size()<<endl;
while(a.size()){
cout<<"当前栈顶元素为"<<a.top()<<endl;
a.pop();
}
}
使用数组模拟(优点:输出后可以保留元素)
#include<iostream>
#include<stack>
using namespace std;
int main()
{
int a[10];
int len;
for(len=0;len<5;len++) a[len]=len+1;
cout<<"栈a的长度为:" <<len<<endl;
while(len--){
cout<<"当前栈顶元素为"<<a[len]<<endl;
}
}
普通队列
基本介绍
- 头文件:
#include<queue>
- 初始化:
queue<int> a;
- 相关用法:
用法 | 代码 |
---|
将x入队 | a.push(x); |
获取队长 | a.size() |
获取队尾元素 | a.back() |
获取队头元素 | a.front() |
出队操作 | a.pop(); |
交换队列a和b | a.swap(b); |
其余用法可参考:https://zh.cppreference.com/w/cpp/container/queue
使用方法(缺点:输出后不能保留数据)
#include<iostream>
#include<queue>
using namespace std;
int main()
{
queue<int> a;
queue<int> b;
for(int i:{1,2,3,4,5}) a.push(i);
for(int i:{3,2,1}) b.push(i);
cout<<"队列a的长度为:" <<a.size()<<endl;
cout<<"队列b的长度为:" <<b.size()<<endl;
cout<<"当前a的队尾元素为"<<a.back()<<endl;
cout<<"当前b的队尾元素为"<<b.back()<<endl;
a.swap(b);
cout<<"队列a:"<<endl;
while(a.size()){
cout<<"当前队头元素为"<<a.front()<<endl;
a.pop();
}
cout<<"队列b:"<<endl;
while(b.size()){
cout<<"当前队头元素为"<< b.front()<<endl;
b.pop();
}
}
使用数组模拟(优点:可以保留数据)
#include<iostream>
using namespace std;
int main()
{
int a[100];
int front;
int back;
for(front=back=1;back<=5;back++) a[back]=back;
cout<<"队列a的长度为:" <<back-front<<endl;
cout<<"当前a的队尾元素为"<<a[back-1]<<endl;
while(back>front){
cout<<"当前队头元素为"<<a[front++]<<endl;
}
}
双端队列
基本介绍
- 头文件:
#include<queue>
- 初始化:
deque<int> a;
- 相关用法:
用法 | 代码 |
---|
将x从队尾入队 | a.push_back(x); |
将x从队头入队 | a.push_front(x); |
从队尾出队 | a.pop_back; |
从队头出队 | a.pop_front; |
清空队列 | a.clear(); |
检查队列是否为空 | a.empty() |
获取队列长度 | a.size() |
获取队头元素 | a.front() |
获取队尾元素 | a.back() |
获取第i个元素(从0开始) | a.at(i) |
获取第i个元素(从0开始) | a.operator[](i) |
其余用法可参考:https://zh.cppreference.com/w/cpp/container/deque
使用方法
#include<iostream>
#include<queue>
using namespace std;
int main()
{
deque<int> a;
for(int i:{1,2,3}) a.push_back(i);
for(int i:{0,-1,-2,-3})a.push_front(i);
cout<<"队列a的长度为:" <<a.size()<<endl;
cout<<"当前a的队尾元素为"<<a.back()<<endl;
while(a.size()){
cout<<"当前队头元素为"<<a.front()<<endl;
a.pop_front();
}
}
优先队列
基本介绍
- 头文件:
#include<queue>
- 初始化:
priority_queue<int> a;
- 相关用法:
用法 | 代码 |
---|
将x从队尾入队 | a.push(x); |
获取队长 | a.size() |
获取最大元素 | a.top() |
最大元素出队 | a.pop(); |
其余用法可参考:https://zh.cppreference.com/w/cpp/container/priority_queue
使用方法(优点:提供常数时间的最大元素查找)
#include<iostream>
#include<queue>
using namespace std;
int main()
{
priority_queue<int> a;
for(int i:{5,3,8,7,6,-5,-7}) a.push(i);
cout<<"队列a的长度为:" <<a.size()<<endl;
while(a.size()){
cout<<a.top()<<" ";
a.pop();
}
}
你悟解了吗?