当前位置: 首页 > news >正文

制作英文网站多少钱来年做哪些网站能致富

制作英文网站多少钱,来年做哪些网站能致富,网站怎样建立数据库连接,aspcms 你的网站未安装 请先安装✨✨ 欢迎大家来到小伞的大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 小伞的主页:xiaosan_blog 1. priority_queue的介绍和使用 priority_queue文档介绍 优先级队列的实现的关键…

✨✨ 欢迎大家来到小伞的大讲堂✨✨

🎈🎈养成好习惯,先赞后看哦~🎈🎈

所属专栏:C++学习
小伞的主页:xiaosan_blog

1. priority_queue的介绍和使用

priority_queue文档介绍

优先级队列的实现的关键取决于数据结构的堆,如果忘记了,就回去看看吧

【数据结构】详解堆

1. 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。

2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。

3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。

4. 底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭代器访问,并支持以下操作:

  • empty():检测容器是否为空
  • size():返回容器中有效元素个数
  • front():返回容器中第一个元素的引用
  • push_back():在容器尾部插入元素
  • pop_back():删除容器尾部元素

5. 标准容器类vector和deque满足这些需求。默认情况下,如果没有为特定的priority_queue

类实例化指定容器类,则使用vector。

6. 需要支持随机访问迭代器,以便始终在内部保持堆结构。容器适配器通过在需要时自动调用算法函数make_heap、push_heap和pop_heap来自动完成此操作。

1.1 priority_queue的使用

优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。注意:默认情况下priority_queue是大堆。

函数声明接口说明
priority_queue()/priority_queue(first,last)构造一个空的优先级队列
empty( )检测优先级队列是否为空,是返回true,否返回false
top( )返回优先级队列的最大值(最小值),即堆顶元素
push(x)在优先级队列中插入x
pop()删除优先级队列中的最大(最小)元素,即堆顶元素

注意:

1.在默认情况下priority_queue默认为大堆

#include<iostream>
#include <vector>
#include <queue>using namespace std;
void TestPriorityQueue()
{vector<int> v{ 3,2,7,6,0,4,1,9,8,5 };priority_queue<int> q1(v.begin(), v.end());while (!q1.empty()){cout << q1.top() << " ";q1.pop();}cout << endl;priority_queue<int, vector<int>, greater<int>> q2(v.begin(), v.end());while (!q2.empty()){cout << q2.top() << " ";q2.pop();}
}
int main()
{TestPriorityQueue();return 0;
}

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<Date> 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<Date, vector<Date>, greater<Date>> q2;q2.push(Date(2018, 10, 29));q2.push(Date(2018, 10, 28));q2.push(Date(2018, 10, 30));cout << q2.top() << endl;
}

3.可以使用仿函数进行大堆小堆的排序

仿函数实质是一个类,是一个什么类呢?
是一种重载了函数调用运算符operator()的类或结构体,它可以使一个类的使用看上去像一个函数。仿函数可以接受参数并返回值,可以用于STL算法中的函数对象参数,也可以用于函数指针的替代。

仿函数的主要作用包括:
①提供一种灵活的方式来实现函数对象‌,可以根据实际需求定制自己的函数对象,比如排序、查找等算法。
‌②封装函数参数‌,使得算法可以接受不同类型的参数,增加算法的通用性。
③保存状态‌,在多次调用之间保持状态,避免每次调用时都需要重新计算
‌④替代函数指针‌,因为函数指针只能指向全局函数或静态成员函数,而仿函数可以指向任意类型的函数,包括成员函数和非静态成员函数。

template<class T>
class Less
{
public:bool operator()(const T& x,const T& y){return x < y;}
};template<class T>
class Greater
{
public:bool operator()(const T& x, const T& y){return x > y;}
};template<class T,class Compare>
void BubbleSort(vector<T>& v,Compare com)
{int i = 0, j = 0;for (i = 0; i < v.size(); i++){int flag = 0;for (j = 1; j < v.size() - i; j++){if (com(v[j], v[j - 1])){swap(v[j-1],v[j]);flag = 1;}}if (flag == 0){break;}}
}int main()	
{vector<int> v;v.push_back(5);v.push_back(7);v.push_back(8);v.push_back(1);v.push_back(0);v.push_back(2);v.push_back(6);v.push_back(9);BubbleSort(v, Less<int>());//此处是匿名对象传参的,也可以先创建Less less;auto it1 = v.begin();while (it1 != v.end()){cout << *it1 << " ";++it1;}return 0;
}

1.2 priority_queue的模拟实现

#define _CRT_SECURE_NO_WARNINGS  1

#include<iostream>
#include<vector>
#include<functional>
using namespace std;

//仿函数

template <class T>
class Less
{
public:
    bool operator ()(const T& x, const T& y) {
        return x < y;
    }
};

template <class T>
class Greater
{
public:
    bool operator ()(const T& x, const T& y) {
        return x > y;
    }
};


namespace sui {
    template <class T, class Container = vector<T>, class Compare = class Greater<T> >
    class priority_queue
    {
    public:

        bool empty() const {
            return c.empty();
        }
        size_t size() const {
            return c.size();
        }
        T top() const {
            return c[0];
        }
        void AdjustUp(int child)
        {
            Compare com;
            int parent = (child - 1) / 2;
            while (child > 0) {
                if (com(c[parent], c[child])) {
                    swap(c[parent], c[child]);
                    child = parent;
                    parent = (child - 1) / 2;
                }
                else {
                    break;
                }
            }

        }
        void push(const T& x) {
            c.push_back(x);
            AdjustUp(c.size() - 1);
        }

        void AdjustDown(int parent) {
            size_t child = parent * 2 + 1;//假设左孩子小
            //建大堆
            Compare com;
            while (child < c.size()) {
                //如果右孩子大,child为右孩子
                if (child + 1 < c.size() && com(c[child], c[child + 1])) {
                    ++child;
                }
                 //如果父亲的值小于孩子
                if (com(c[parent], c[child])) {
                    swap(c[parent], c[child]);
                    parent = child;
                    child = parent * 2 + 1;
                }
                else
                {
                    break;
                }
            }
        }

        void pop() {
            swap(c[0], c[c.size() - 1]);
            c.pop_back();
            AdjustDown(0);
        }

  
    private:
        Container c;
    
    };
};

http://www.yayakq.cn/news/606484/

相关文章:

  • 南和住房和城乡建设局网站wordpress如何在首页前加引导页
  • 网站的网页大上海人才网
  • 网站全局搜索如何做宁波网站建设费用是多少钱
  • 广州网站设计建设百度网站申诉
  • 新手学做网站相关书籍企业网站建设 价格
  • 网站建站上海门户网站建设流程
  • 自己买域名可以做网站吗网站建设开发 脚本语言
  • 三亚河北建设招聘信息网站网上推
  • 营销网站建设评估与分析谷歌广告联盟一个月能赚多少
  • 重庆做网站 哪个好些嘛哪个国家的绘本网站做的好
  • 设计网站包含的功能模块企业网站优化内容
  • 什么公司做的网站好建设网站进行商品营销的重要性
  • 站长工具免费做旅游网站的公司
  • 厦门网站建设设计公司哪家好百度注册新账号
  • 商城网站建设是 什么软件网站开发的问题
  • 在上海做兼职在哪个网站微交易网站建设
  • 北沙滩网站建设公司个人使用网站
  • 代理网站备案表网页设计模板免费下载网站
  • 网站网页框架构架图怎么做中国企业排名前十名
  • 搜索引擎网站推广定义网站制作中动态展示怎么做
  • 个人做搜索网站违法吗商城小程序 wordpress
  • 深圳市网站建设公司听歌网站源码
  • 盐城市城镇化建设投资集团网站建设制作外贸网站的公司简介
  • 淘宝客自己做网站福田专业做网站公司
  • 电子元器件网站建设WordPress多重筛选功能
  • 西宁网站制作公司企业网站用织梦好吗
  • 平板电脑可以做网站吗org的域名网站
  • 蚂蚁中国网站建设网站建设设计语言
  • 企业网站怎么做优化芒果tv网站建设的目标
  • 浏览器如何推广自己网站十大经典事件营销案例分析