stack_queue:三个关键注意事项解析

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: stack_queue:三个关键注意事项解析

一、stack与容器

template<class T, class Container>
class stack
{
private:
    Container _con;
};

Container 为容器,在实例化创建对象时,我们可以传 vector<T>list<T> 等作为栈的底层。

举例:

int main()
{
  stack<int, vector<int>> st1;
  stack<int, list<int>> st2;

  return 0;
}

二、queue 和 priority_queue 的底层封装

  • queue 不支持用 vector 封装

queue 的原则是先进先出,使用过程中存在大量“头删”——pop_front(),用 vector 进行封装效率太低,故通常借助 list 进行模拟实现

  • priority_queue 不支持用 list 封装

queue 的原则是先进先出,使用过程中存在大量“头删”——pop_front(),用 vector 进行封装效率太低,故通常借助 list 进行模拟实现

  • priority_queue 不支持用 list 封装

优先队列 priority_queue 的本质是“堆”(默认建大堆),在插入和删除时,通常会涉及向上调整建堆向下调整建堆的方法——大量 [] 重载的使用。

list 不支持 [] 的重载,故 priority_queue 不支持底层使用 list。

三、仿函数

在C++中,仿函数通常是一个类或结构体,在类中通过重载 operator() 实现,其实例化对象可以像函数一样被调用

less<T> 就是一个仿函数——从根往叶子节点看,数值/优先级 越来越小,因此默认为大堆;如果我们传 greater<T> —— 从根往叶子节点看,数值/优先级 越来大,则建小堆。

  template<class T>
  class less
  {
  public:
    bool operator()(const T& a, const T& b)
    {
      return a > b;
    }
  };

  template<class T>
  class greater
  {
  public:
    bool operator()(const T& a, const T& b)
    {
      return a < b;
    }
  };

因为要建大堆,当子节点的数值/优先级比父节点大时——_con[child] > _con[parent],要将子节点向上调整

相关文章
|
1月前
|
设计模式 存储 C++
C++:Stack和Queue的模拟实现
C++:Stack和Queue的模拟实现
|
1月前
|
存储 算法 C语言
从C语言到C++_19(容器适配器+stack和queue模拟实现+优先级队列priority_queue)(下)
从C语言到C++_19(容器适配器+stack和queue模拟实现+优先级队列priority_queue)
32 2
|
1月前
|
缓存 算法 C语言
从C语言到C++_19(容器适配器+stack和queue模拟实现+优先级队列priority_queue)(上)
从C语言到C++_19(容器适配器+stack和queue模拟实现+优先级队列priority_queue)
23 0
|
1月前
|
算法 C语言 C++
从C语言到C++_19(容器适配器+stack和queue模拟实现+优先级队列priority_queue)(中)
从C语言到C++_19(容器适配器+stack和queue模拟实现+优先级队列priority_queue)
22 0
|
1月前
|
存储 算法 C++
C++:stack、queue、priority_queue增删查改模拟实现、deque底层原理
C++:stack、queue、priority_queue增删查改模拟实现、deque底层原理
41 0
|
1月前
|
设计模式 C++ 容器
stack和queue的模拟实现
stack和queue的模拟实现
31 0
|
9月前
|
设计模式 算法 C语言
C++实践模拟(stack,queue & priority_queue,仿函数)
C++实践模拟(stack,queue & priority_queue,仿函数)
44 0
|
8月前
|
存储 算法 程序员
stack、queue、priority_queue的使用和简单实现【STL】
stack、queue、priority_queue的使用和简单实现【STL】
40 0
|
C++ 容器
C++ -- queue 和 stack模拟实现
C++ – queue 和 stack模拟实现 1. queue模拟实现 队列是先进先出的特性,这里要支持vector、list、deque等等,这里queue和stack模拟实现,都是直接复用
50 0
|
存储 设计模式 算法
【STL】stack、queue、priority_queue模拟实现
一. deque简单介绍 1.1 deque的功能介绍 deque(双端队列