思淘网站建设,代理服务器地址怎么填,有哪些做家教网站,南昌网站seo 优帮云文章目录 引言栈和队列 priority_queue仿函数迭代器区间 引言
栈的特性是先进后出#xff0c;队列的特性是先进先出#xff0c;然而双向队列同时具有栈和队列的特性#xff0c;所以我们可以通过双向队列来适配出栈和队列。 先看库里面
栈和队列 stack和queue模板参数里面都… 文章目录 引言栈和队列 priority_queue仿函数迭代器区间 引言
栈的特性是先进后出队列的特性是先进先出然而双向队列同时具有栈和队列的特性所以我们可以通过双向队列来适配出栈和队列。 先看库里面
栈和队列 stack和queue模板参数里面都有一个class Container deque,就是说库里面在实现它们时默认是通过deque适配出来的。 比如stack的push底层其实是通过调用deque的push_back()实现的pop底层是通过调用deque的pop_back()实现的
对于queue的push底层是通过调用deque的push_front()实现的pop是通过调用deque的1pop_front()实现的
priority_queue
优先队列底层就是堆使用数组实现的所以我们可以使用容器vector适配出优先队列
仿函数
此外还有一个参数 class Compare less 这个参数其实就是一个仿函数什么是仿函数呢就是把一个类对象像函数一样使用。怎么实现呢底层就是把这个类重载了一个()运算符。在传这个参数时我们可以自己实现一个仿函数去传也可以使用库里面的 这两个是库里面包含的两个仿函数用于比较大小去排序值得注意的是这里的less指的是升序而greater是指降序 因此优先队列默认不传第二个参数的情况下输出结果是升序
//仿函数/函数对象
//重载了括号,让类可以向函数一样被调用
templateclass T
class Less
{
public:bool operator()(const T x, const T y){return x y;}
};templateclass T
class Greater
{
public:bool operator()(const T x, const T y){return x y;}
};库里面
//template class T struct less : binary_function T, T, bool {
// bool operator() (const T x, const T y) const { return x y; }
//};
//
//template class T struct greater : binary_function T, T, bool {
// bool operator() (const T x, const T y) const { return x y; }
//};迭代器区间 容器对象的构造函数还支持迭代器区间初始化就是通过迭代器去迭代别的对象中存的值来对这个对象进行初始化。
templateclass InputInterator
priority_queue(InputInterator first, InputInterator last)
{//插入数据while (first ! last){_con.push_back(*first);first;}//建堆//从最后一个非叶子节点开始建堆-----关键for (int i (_con.size()-1-1) / 2; i 0; i--){AdjustDown(i);}
}