#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;
}