函数说明
|
接口说明
|
stack()
|
构造空的栈
|
empty()
|
检测 stack 是否为空
|
size()
|
返回 stack 中元素的个数
|
top()
|
返回栈顶元素的引用
|
push()
|
将元素 val 压入 stack 中
|
pop()
|
将 stack 中尾部的元素弹出
|
#include
namespace bite
{
template
class stack
{
public:
stack() {}
void push(const T& x) { _c.push_back(x); }
void pop() { _c.pop_back(); }
T& top() { return _c.back(); }
const T& top()const { return _c.back(); }
size_t size()const { return _c.size(); }
bool empty()const { return _c.empty(); }
private:
std::vector _c;
};
}
函数声明
|
接口说明
|
queue()
|
构造空的队列
|
empty()
|
检测队列是否为空,是返回 true ,否则返回 false
|
size()
|
返回队列中有效元素的个数
|
front()
|
返回队头元素的引用
|
back()
|
返回队尾元素的引用
|
push()
|
在队尾将元素 val 入队列
|
pop()
|
将队头元素出队列
|
#include
namespace bite
{
template
class queue
{
public:
queue() {}
void push(const T& x) { _c.push_back(x); }
void pop() { _c.pop_front(); }
T& back() { return _c.back(); }
const T& back()const { return _c.back(); }
T& front() { return _c.front(); }
const T& front()const { return _c.front(); }
size_t size()const { return _c.size(); }
bool empty()const { return _c.empty(); }
private:
std::list _c;
};
}
函数声明
|
接口说明
|
priority_queue()/priority_queue(first,
last)
|
构造一个空的优先级队列
|
empty( )
|
检测优先级队列是否为空,是返回 true ,否则返回
false
|
top( )
|
返回优先级队列中最大 ( 最小元素 ) ,即堆顶元素
|
push(x)
|
在优先级队列中插入元素 x
|
pop ()
|
删除优先级队列中最大 ( 最小 ) 元素,即堆顶元素
|
#include
#include
#include // greater算法的头文件
void TestPriorityQueue()
{
// 默认情况下,创建的是大堆,其底层按照小于号比较
vector v{ 3,2,7,6,0,4,1,9,8,5 };
priority_queue q1;
for (auto& e : v)
q1.push(e);
cout << q1.top() << endl;
// 如果要创建小堆,将第三个模板参数换成greater比较方式
priority_queue, greater> q2(v.begin(), v.end());
cout << q2.top() << endl;
}
2.如果在priority_queue中放自定义类型的数据,用户需要在自定义类型中提供> 或者< 的重载。
class Date
{
public:
Date(int year = 1900, int month = 1, int day = 1)
: _year(year)
, _month(month)
, _day(day)
{}
bool operator<(const Date& d)const
{
return (_year < d._year) ||
(_year == d._year && _month < d._month) ||
(_year == d._year && _month == d._month && _day < d._day);
}
bool operator>(const Date& d)const
{
return (_year > d._year) ||
(_year == d._year && _month > d._month) ||
(_year == d._year && _month == d._month && _day > d._day);
}
friend ostream& operator<<(ostream& _cout, const Date& d)
{
_cout << d._year << "-" << d._month << "-" << d._day;
return _cout;
}
private:
int _year;
int _month;
int _day;
};
void TestPriorityQueue()
{
// 大堆,需要用户在自定义类型中提供<的重载
priority_queue q1;
q1.push(Date(2018, 10, 29));
q1.push(Date(2018, 10, 28));
q1.push(Date(2018, 10, 30));
cout << q1.top() << endl;
// 如果要创建小堆,需要用户提供>的重载
priority_queue, greater> q2;
q2.push(Date(2018, 10, 29));
q2.push(Date(2018, 10, 28));
q2.push(Date(2018, 10, 30));
cout << q2.top() << endl;
}