C++学习之路 STL中栈,队列,优先队列
2014-02-28 08:54
302 查看
STL 栈 stack
头文件: #include<stack>
声明方式:
stack<元素类型,存储容器类型>栈名(xxx);
主要操作:
1.xxx.push(元素) 将于素压入栈
2.xxx.top() 取出栈顶元素,(不从栈中删除)
3.xxx.pop()
将栈顶元素删除
4.xxx.size()
返回栈中元素个数
5.xxx.empty()
栈空返回true,否则返回false
#include<iostream>
#include<stack>
using namespace std;
stack<int>myStack;
int main(){
for(int i=0;i<=9;i++){
myStack.push(i);
}
cout<<"Stack Size: "<<myStack.size() <<endl;
cout<<myStack.top()<<endl;//注意,此处栈顶元素并未弹出
cout<<"Stack Size: "<<myStack.size() <<endl;
while(!myStack.empty()){
cout<<myStack.top()<<endl;
myStack.pop();
}
cout<<"Stack Size: "<<myStack.size() <<endl;
}
STL 队列 queue:
头文件:
#include<queue>
声明方式:
queue<元素类型,存储容器类型>队列名;
主要操作:
1.xxx.front() 返回队首元素
2.xxx.push(元素) 元素入队操作
3.xxx.empty() 队列是否为空
4.xxx.pop() 弹出(清除)队首元素
5.xxx.back() 返回队尾元素
#include<iostream>
#include<queue>
using namespace std;
int main(){
queue<int>myQueue;
for(int i=0;i<=9;i++){
myQueue.push(i);
}
cout<<"Queue Size: "<<myQueue.size()<<endl;
cout<<myQueue.front()<<" "<<myQueue.back()<<endl;
while(!myQueue.empty()){
cout<<myQueue.front()<<endl;
myQueue.pop();
}
cout<<"Queue Size: "<<myQueue.size()<<endl;
return 0;
}
STL 优先队列 priority_queue
头文件:
#include<queue>
声明方式:
priority_queue<元素类型,存储容器类型,自定义比较方式> pq;
主要操作:
1.pq.top()
返回队首元素(注意此处非front)
2.pq.pop()
删除队首元素
3.pq.empty()
判断队列是否为空
4.pq.push(元素)
将元素压入队列
5.pq.size()
返回当前队列中的元素
优先队列中默认元素由大到小排列,当然也可以自己定义比较函数
#include<iostream>
#include<queue>
using namespace std;
int main(){
priority_queue<int>pq;//默认比较函数,将有大到小输出
for(int i=0;i<=9;i++){
pq.push(i);
}
while(!pq.empty()){
cout<<pq.top()<<" ";
pq.pop();
}
cout<<endl;
}当我们在做最短路等其他问题是需要用优先队列使最小值先输出这时就用到自定义比较函数,当然也可以用#include<functional>中的greater<元素类型>(由小到大排列,小的先输出),与之相反的 less<元素类型> 由大到小输出
#include<iostream>
#include<functional>
#include<queue>
using namespace std;
int main(){
priority_queue<int,vector<int>,greater<int> >pq;//注意使用greater时,添加容器类型,还有greater<int>" "> 用空格隔开
//priority_queue<int,vector<int>,less<int> >pq;//由大到小输出
for(int i=0;i<=9;i++){
pq.push(i);
}
while(!pq.empty()){
cout<<pq.top()<<" ";
pq.pop();
}
cout<<endl;
}
自己编写自定义比较函数:
//重载"()"运算符 ,元素可以不为结构体类型,当然也可以为结构体类型 ,而"<"是在结构体中重载
struct myComp{
bool operator()(const int &a,const int &b){
//元素由小到大排列,注意是">" ,由大到小排列为"<"
return a>b;
}
};
priority_queue<int,vector<int>,myComp >pq;
当元素为结构体时,可在结构体内重载''<"
方法一:
struct node{
string name;
int Id;
//重载"<" 不能重载">",报错
bool operator<(const node &a)const{//const一个不能少
return a.Id<Id;//按照Id值由小到大排列,注意是a.Id<Id 若为Id<a.Id 则排序规则相反 ,以a.Id为标杆
}
};方法二:
如有异议,欢迎指正,谢谢
头文件: #include<stack>
声明方式:
stack<元素类型,存储容器类型>栈名(xxx);
主要操作:
1.xxx.push(元素) 将于素压入栈
2.xxx.top() 取出栈顶元素,(不从栈中删除)
3.xxx.pop()
将栈顶元素删除
4.xxx.size()
返回栈中元素个数
5.xxx.empty()
栈空返回true,否则返回false
#include<iostream>
#include<stack>
using namespace std;
stack<int>myStack;
int main(){
for(int i=0;i<=9;i++){
myStack.push(i);
}
cout<<"Stack Size: "<<myStack.size() <<endl;
cout<<myStack.top()<<endl;//注意,此处栈顶元素并未弹出
cout<<"Stack Size: "<<myStack.size() <<endl;
while(!myStack.empty()){
cout<<myStack.top()<<endl;
myStack.pop();
}
cout<<"Stack Size: "<<myStack.size() <<endl;
}
STL 队列 queue:
头文件:
#include<queue>
声明方式:
queue<元素类型,存储容器类型>队列名;
主要操作:
1.xxx.front() 返回队首元素
2.xxx.push(元素) 元素入队操作
3.xxx.empty() 队列是否为空
4.xxx.pop() 弹出(清除)队首元素
5.xxx.back() 返回队尾元素
#include<iostream>
#include<queue>
using namespace std;
int main(){
queue<int>myQueue;
for(int i=0;i<=9;i++){
myQueue.push(i);
}
cout<<"Queue Size: "<<myQueue.size()<<endl;
cout<<myQueue.front()<<" "<<myQueue.back()<<endl;
while(!myQueue.empty()){
cout<<myQueue.front()<<endl;
myQueue.pop();
}
cout<<"Queue Size: "<<myQueue.size()<<endl;
return 0;
}
STL 优先队列 priority_queue
头文件:
#include<queue>
声明方式:
priority_queue<元素类型,存储容器类型,自定义比较方式> pq;
主要操作:
1.pq.top()
返回队首元素(注意此处非front)
2.pq.pop()
删除队首元素
3.pq.empty()
判断队列是否为空
4.pq.push(元素)
将元素压入队列
5.pq.size()
返回当前队列中的元素
优先队列中默认元素由大到小排列,当然也可以自己定义比较函数
#include<iostream>
#include<queue>
using namespace std;
int main(){
priority_queue<int>pq;//默认比较函数,将有大到小输出
for(int i=0;i<=9;i++){
pq.push(i);
}
while(!pq.empty()){
cout<<pq.top()<<" ";
pq.pop();
}
cout<<endl;
}当我们在做最短路等其他问题是需要用优先队列使最小值先输出这时就用到自定义比较函数,当然也可以用#include<functional>中的greater<元素类型>(由小到大排列,小的先输出),与之相反的 less<元素类型> 由大到小输出
#include<iostream>
#include<functional>
#include<queue>
using namespace std;
int main(){
priority_queue<int,vector<int>,greater<int> >pq;//注意使用greater时,添加容器类型,还有greater<int>" "> 用空格隔开
//priority_queue<int,vector<int>,less<int> >pq;//由大到小输出
for(int i=0;i<=9;i++){
pq.push(i);
}
while(!pq.empty()){
cout<<pq.top()<<" ";
pq.pop();
}
cout<<endl;
}
自己编写自定义比较函数:
//重载"()"运算符 ,元素可以不为结构体类型,当然也可以为结构体类型 ,而"<"是在结构体中重载
struct myComp{
bool operator()(const int &a,const int &b){
//元素由小到大排列,注意是">" ,由大到小排列为"<"
return a>b;
}
};
priority_queue<int,vector<int>,myComp >pq;
当元素为结构体时,可在结构体内重载''<"
方法一:
struct node{
string name;
int Id;
//重载"<" 不能重载">",报错
bool operator<(const node &a)const{//const一个不能少
return a.Id<Id;//按照Id值由小到大排列,注意是a.Id<Id 若为Id<a.Id 则排序规则相反 ,以a.Id为标杆
}
};方法二:
struct node{ string name; int Id; friend bool operator<(const node &a, const node &b){//作为友员比较函数 ,重载"<" ,两个参数,注意排序顺序 //注意此时的比较a.Id<b.Id 使Id由大到小排列 return a.Id<b.Id; } }; priority_queue<node>pq;所以,当元素非结构体时,重载"()"运算符,当元素为结构体时,按方法一在结构体内重载“<”
如有异议,欢迎指正,谢谢
相关文章推荐
- 【用法详解】C++-STL 队列queue与优先队列priority_queue的用法详解与学习心得
- C++ STL学习笔记7--priority_queue优先队列
- c++ 栈、队列、优先队列 STL
- stl学习(一)优先队列
- c++STL数据结构之优先队列queue应用
- stl学习(一)优先队列
- c++stl之队列 栈 与优先队列
- C++STL之优先队列
- c++ STL学习之queue队列总结
- 【c++——STL】标准模板库STL中优先队列Priority Queues使用手册
- C++STL之双端队列的学习
- 详解广度优先搜索(顺便学习C++的队列STL,也有一部分深搜的东西)
- c++学习之路--------------stl(2)
- C++ STL学习笔记三 deque双端队列容器
- C++ 学习笔记之 STL 队列
- C++ STL学习笔记三 deque双端队列容器
- 【C++】【STL】优先队列的实现
- 【搜索入门专题1】 hdu1242 J - Rescue c++ stl容器之优先队列+BFS
- C++STL之priority_queue优先队列容器
- STL学习之优先队列(Priority_queue)(1)