c++ STL queue及priority_queue

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/u013919153/article/details/82463734