容器适配器:stack、queue、priority_queue

来源:互联网 发布:sql分页查询 编辑:程序博客网 时间:2024/05/17 17:56

#include<iostream>
#include<stack>
#include<vector>
#include<list>
#include <queue>
#include<set>
#include <functional>
#include <iterator>
using namespace std;

int main(){

 ///////////利用现有的容器,适配成新的容器,如现有的list、vector容器
 cout<<"=======stack的用法=============="<<endl;
 //stack<int> s1; //ok
 //stack<int,vector<int>> s1; //ok
  stack<int,list<int>> s1; //ok
 for (int i=0;i<5;i++)
 {
  s1.push(i);
 }
 /*for (size_t i=0;i<s1.size();i++)
 {
  cout<<s1.top()<<" ";
  s1.pop();
 }*///该循环不能循环完
 while(!s1.empty()){

  cout<<s1.top()<<" ";
  s1.pop();//调用的是pop_back()
 }
 cout<<endl;

 /////////////queue的用法////////////////////

 cout<<"======queue的用法============"<<endl;
 //queue<int> qe;     //ok
 //queue<int,vector<int>> qe;//error:vector没有pop_front接口
 queue<int,list<int>> qe;//ok,list有pop_front接口
 for (int i=0;i<5;i++)
 {
  qe.push(i);
 }

 while (!qe.empty())
 {
  cout<<qe.front()<<' ';
  qe.pop();  //调用的是pop_front()
 }
 cout<<endl;


 cout<<"========priority_queue优先级队列的用法==============="<<endl;
  cout<<"=======priority_queue:以堆的形式存放数据make_heap======="<<endl;
 int a[5]={5,3,2,4,1};
 //priority_queue<int> pq(a,a+5);//ok,默认的函数对象是less是按照从大到小的优先级顺序输出
 priority_queue<int,vector<int>,greater<int>> pq(a,a+5);//ok,按照函数的对象是greater的从小到大优先级顺序输出
 while (!pq.empty())
 {
  cout<<pq.top()<<' '; //
  
  pq.pop();
 }
 cout<<endl;


 cout<<"==make_heap的用法:构建一个二叉堆,二叉堆是一个完全的二叉树,用数组来保存======"<<endl;


 int  bb[]={4,5,2,1,3};

 make_heap(bb,bb+5);//ok,默认构建的是一个最大堆,最大堆是父亲节点比他的孩子节点都要大,输出5、4、2、1、3
 //make_heap(bb,bb+5,greater<int>());//ok,构建的是一个最小堆,最大堆是父亲节点比他的孩子节点都要小:输出 1、3、2、5、4
 copy(bb,bb+5,ostream_iterator<int>(cout," "));

 cout<<endl;

 //sort(bb,bb+5);//ok,插入排序:_Insertion_sort

 sort_heap(bb,bb+5);//ok,堆排序

 copy(bb,bb+5,ostream_iterator<int>(cout," "));

 cout<<endl;

 


 cout<<"======set容器的用法==========="<<endl;

 set<int> st;//ok,不允许关键码重复
 st.insert(4);
 st.insert(5);
 st.insert(3);
 st.insert(3);
 st.insert(2);

 for (set<int>::const_iterator it=st.begin();it!=st.end();++it)
 {

  cout<<*it<<' ';
 }
 cout<<endl;

 cout<<"==========multiset容器的用法=============="<<endl;

 multiset<int> mst;//ok,允许关键码重复
 mst.insert(4);
 mst.insert(5);
 mst.insert(3);
 mst.insert(3);
 mst.insert(2);

 for (multiset<int>::const_iterator it=mst.begin();it!=mst.end();++it)
 {

  cout<<*it<<' ';
 }
 cout<<endl;

 

 cout<<"=======从vector容器中剔除重复的元素============"<<endl;

 int cc[]={1,2,3,4,3};

 vector<int> v(cc,cc+5);
 /*for (vector<int>::iterator it=v.begin();it!=v.end();++it)
 {
  if (*it==3)
  {
   v.erase(it);
  }else{
   cout<<*it<<endl;
  }
 }*///error:v.erase(it)之后 it变成了悬浮指针
 for (vector<int>::iterator it=v.begin();it!=v.end();)
 {
  if (*it==3)
  {
   it=v.erase(it);
  }else{
   cout<<*it<<endl;
   ++it;
  }
 }
 return 0;
}

原创粉丝点击