版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013919153/article/details/82463734
#include <iostream>
#include <stack>
#include <queue>
#include <functional>
using namespace std;
#define VNAME(value) {cout<<(#value)<<":"<<endl;}
void print_queue(queue<int> v){
while (!v.empty())
{
cout<<v.front()<<" ";
v.pop();
}
cout<<endl;
}
template<class T>
void print_priority_queue(T v){
while (!v.empty())
{
cout<<v.top()<<" ";
v.pop();
}
cout<<endl;
}
/**
template <class T, class Container = deque<T> > class queue;
**/
void test_queue(){
std::deque<int> mydeck (3,100); // deque with 3 elements
std::list<int> mylist (2,200); // list with 2 elements
std::queue<int> first; // empty queue
std::queue<int> second (mydeck); // queue initialized to copy of deque
std::queue<int,std::list<int> > third; // empty queue with list as underlying container
std::queue<int,std::list<int> > fourth (mylist);
std::cout << "size of first: " << first.size() << '\n';
std::cout << "size of second: " << second.size() << '\n';
std::cout << "size of third: " << third.size() << '\n';
std::cout << "size of fourth: " << fourth.size() << '\n';
first.push(1);
first.push(10);
cout<<"first - second is "<<first.front() - first.back()<<endl;
VNAME(first);
print_queue(first);
first.swap(second);
first.emplace(8);
print_queue(first);
//关系运算符 ==, !=, <, >, <=, >=
cout<<endl<<endl;
}
class mycomparison
{
bool reverse;
public:
mycomparison(const bool& revparam=false){
reverse=revparam;
}
bool operator() (const int& lhs, const int&rhs) const{
if (reverse)
return (lhs>rhs);
else
return (lhs<rhs);
}
};
/**
template <class T, class Container = vector<T>,
class Compare = less<typename Container::value_type>
> class priority_queue;
**/
void test_priority_queue(){
int myints[]= {10,60,50,20};
std::priority_queue<int> first;
std::priority_queue<int> second (myints,myints+4);
std::priority_queue<int, std::vector<int>, std::greater<int> >
third (myints,myints+4);
// using mycomparison:
typedef std::priority_queue<int,std::vector<int>,mycomparison> mypq_type;
mypq_type fourth; // less-than comparison
mypq_type fifth (mycomparison(true)); // greater-than comparison
std::cout << "size of first: " << first.size() << '\n';
std::cout << "size of second: " << second.size() << '\n';
std::cout << "size of third: " << third.size() << '\n';
std::cout << "size of fourth: " << fourth.size() << '\n';
if (first.empty())
{
cout<<"first is empty."<<endl;
}
first.push(1);
first.emplace(3);
first.push(9);
first.emplace(4);
VNAME(first);
print_priority_queue(first);
first.swap(second);
print_priority_queue(first);
third.emplace(5);
third.emplace(3);
third.push(2);
third.push(7);
VNAME(third);
print_priority_queue(third);
fifth.push(1);
fifth.push(9);
fifth.emplace(3);
fifth.emplace(5);
VNAME(fifth);
print_priority_queue(fifth);
cout<<endl<<endl;
}