怎样找公司做单的网站wordpress PHP cpanel

web/2025/9/30 23:09:04/文章来源:
怎样找公司做单的网站,wordpress PHP cpanel,霸气的公司名字大全,创建网站需要哪些过程点击蓝字关注我们一、红黑树及其节点的设计对于底层都是红黑树的map和set来说#xff0c;他们之间存在的最大的区别就是#xff1a;对于set是K模型的容器#xff0c;而map是KV模型的容器。为了更好的灵活兼容实现map和set#xff0c;就需要在红黑树以及树节点上进行特别的设…点击蓝字关注我们一、红黑树及其节点的设计对于底层都是红黑树的map和set来说他们之间存在的最大的区别就是对于set是K模型的容器而map是KV模型的容器。为了更好的灵活兼容实现map和set就需要在红黑树以及树节点上进行特别的设计1、树节点的设计对于红黑树的节点我们需要节点对于set来说储存key对于map来说储存key-value键值对所以这里我们就直接让节点类型的阈值类型为T用来控制储存类型实现代码templateclass T struct RBTreeNode {RBTreeNodeT* _left;RBTreeNodeT* _right;RBTreeNodeT* _parent;T _data;//T可以是key也可以是pairK,VColour _col;RBTreeNode(const T data):_left(nullptr), _right(nullptr), _parent(nullptr), _data(data), _col(RED){} };解释对于set实现我们传入key对于map实现我们传入pairkey,value由此满足set和map各自的需求2、红黑树的设计想要兼容map和set我们依旧需要红黑树的模板有两个类型来控制和满足上层对下层的需求实现代码templateclass K, class T class RBTree {typedef RBTreeNodeT Node; public://....... private:Node* _root; };注这里的Node我们不想让外部直接获取使用我们typedef在private域中解释为了兼容set和map对于第一个参数我们是用来比较的key类型第二个参数是用来储存数据的类型这里我们对红黑树第二个模板参数进行灵活传参可能是键值key也可能是pairkey,value对于set传入底层红黑树的模板参数就是key和key对于map传入底层红黑树的模板参数就是key和pairkey,value注对于set来说第二个参数有点多余但是对于map来说因为map的接口当中有些是只要求给出键值key用来比较的如find()和erase(),如果只有一个参数传入pairkey,value类型但是只能得到第一个key类型的值无法获得key的类型不能实现模板函数3、取值仿函数的使用我们在设计树节点之后达到了对于不同容器存入不同类型的效果但是真实在实现时在插入或者删除时我们需要要拿出节点中储存类型的数据进行比较分析对于set的T本身就是键值key直接用T进行比较即可但是对于map的储存类型是pairKey, Value我们需要取出pair的firstkey值进行比较这两种的都是取值比较但是需要的行为是不一样的由此我们还需要一个仿函数用来灵活取值比较对于不同容器我们需要不同的仿函数类型由此在红黑树的模板列表中还需要一个模板类型参数灵活控制传入的仿函数类型注仿函数就是使一个类的使用看上去像一个函数其实现就是类中实现一个operator()这个类就有了类似函数的行为就是一个仿函数类了红黑树框架templateclass K, class T, class KeyOfT class RBTree {typedef RBTreeNodeT Node; public://... private:Node* _root; };map实现框架namespace cole {templateclass K, class Vclass map{struct MapOfKey{const K operator()(const pairK, V kv) {return kv.first;}};public://...private:RBTreeK, pairconst K, V, MapOfKey _t;}; }set实现框架namespace cole {templateclass Kclass set{struct SetOfKey{const K operator()(const K key) {return key;}};public://...private:RBTreeK, K, SetOfKey _t;}; }仿函数使用示例Node* Find(const K key) {KeyOfT kot;Node* cur _root;while (cur){if (kot(cur-_kv.first) key){cur cur-_left;}else if (kot(cur-_kv.first) key){cur cur-_right;}else{return cur;}}return nullptr; }二、红黑树的迭代器迭代器本质上是指针的一个封装的类其底层就是指针好处是可以方便遍历是数据结构的底层实现与用户透明对于string,vector,list等容器其本身的结构上是比较简单的迭代器的实现也很简单但是对于二叉树结构的红黑树来说需要考虑很多的问题1、begin()与end()STL明确规定begin()与end()代表的是一段前闭后开的区间对红黑树进行中序遍历后可以得到一个有序的序列因此begin()可以放在红黑树中最小节点(即最左侧节点)的位置end()放在最大节点(最右侧节点)的下一个位置即nullptr示图2、operator()与operator–()找到begin()和end()之后要遍历红黑树最主要的还是能找到要遍历的下一个节点红黑树的中序遍历是有序的也就是说当一个结点的正向迭代器进行操作后应该根据红黑树中序遍历的序列找到当前结点的下一个结点实现逻辑对于中遍历到当前节点来说该节点的左子树应该是已经被遍历过了所以只需要考虑右子树如果当前结点的右子树不为空则操作后应该找到其右子树当中的最左结点如果当前结点的右子树为空则该子树已经被遍历完了则操作后应该在该结点的祖先结点中找到孩子不在父亲右的祖先说明如果是孩子节点在父亲的左说明父亲的右节点没有遍历如果孩子在父亲的右说明以父亲节点为根的子树已经遍历完了还需要继续向上找如果一直向上遍历到nullptr说明整颗树已经遍历完了end()返回的就是nullptr注怎么看该节点的右节点遍历过没有这里需要一个指针记录上一次经过的节点地址进行比较地址就行了实现代码Self operator() {if (_node-_right)//右子节点存在{//找到右子树中最左节点Node* cur _node-_right;while (cur-_left){cur cur-_left;}_node cur;}else//右子节点不存在向上找{Node* cur _node;//记录走过的节点Node* parent _node-_parent;while (parent parent-_right cur){cur parent;parent parent-_parent;}_node parent;}return *this; }注对于–来说可以参考的实现逻辑是完全相反的实现–代码Self operator--() { if (_node-_left)//左子节点存在{ //找左子树中的最右节点Node* cur _node-_left; while (cur-_right){cur cur-_right;}_node cur;} else//左子节点不存在{Node* cur _node;Node* parent _node-_parent; while (parent parent-_left cur){cur parent; parent parent-_parent;}_node parent;} return *this; }3、正反迭代器的实现对于正向迭代器与反向迭代器的区别就是begin()指向的位置不一样迭代器的和–的实现相反但本质上还是差不多的所以实现正向迭代器后我们可以直接使用适配器在正向迭代器的基础上对其接口进行封装达到反向迭代器的效果正向迭代器实现代码templateclass T, class Ref, class Ptr struct _TreeIterator { //声明类型便于反向迭代器对类型的提取typedef Ref reference;typedef Ptr pointer;typedef RBTreeNodeT Node;typedef _TreeIteratorT, Ref, Ptr Self;Node* _node;_TreeIterator(Node* node):_node(node){}Ref operator*(){ return _node-_data;}Ptr operator-(){ return _node-_data;}bool operator(const Self it)const{ return _node it._node;}bool operator! (const Self it)const{ return _node ! it._node;}Self operator(){ if (_node-_right){Node* cur _node-_right; while (cur-_left){cur cur-_left;}_node cur;} else{Node* cur _node;Node* parent _node-_parent; while (parent parent-_right cur){cur parent; parent parent-_parent;}_node parent;} return *this;}Self operator--(){ if (_node-_left){Node* cur _node-_left; while (cur-_right){cur cur-_right;}_node cur;} else{Node* cur _node;Node* parent _node-_parent; while (parent parent-_left cur){cur parent; parent parent-_parent;}_node parent;}return *this;} };反向迭代器实现代码//适配器构造反向迭代器 templateclass Iterator struct ReverseIterator { //类型未实例化无法取出里面的类型此时需要使用typename告诉编译器等实例化后再到类里面找对应的类型 typedef typename Iterator::reference Ref; typedef typename Iterator::pointer Ptr; typedef ReverseIteratorIterator Self;Iterator _it;ReverseIterator(Iterator it):_it(it){}//在正向迭代器接口上进行封装复用 Ref operator*(){ return *_it;}Ptr operator-(){ return _it.operator-();}bool operator(const Self it)const{ return it._it_it;}bool operator! (const Self it)const//两个const{ return _it ! it._it;}Self operator(){--_it; return *this;}Self operator--(){_it; return *this;} };三、map和set的实现1、红黑树的实现具体实现代码//颜色 enum Colour {RED,BLACK, };templateclass T struct RBTreeNode {RBTreeNodeT* _left;RBTreeNodeT* _right;RBTreeNodeT* _parent;T _data;//T可以是key也可以是pairK,VColour _col;RBTreeNode(const T data):_left(nullptr), _right(nullptr), _parent(nullptr), _data(data), _col(RED){} };templateclass K, class T, class KeyOfT class RBTree {typedef RBTreeNodeT Node; public:typedef _TreeIteratorT, T, T* iterator;typedef _TreeIteratorT,const T, const T* const_iterator;typedef ReverseIteratoriterator reverse_iterator;typedef ReverseIteratorconst_iterator reverse_const_iterator;RBTree():_root(nullptr){}~RBTree(){_Destory(_root);}iterator begin(){Node* cur _root; while (curcur-_left){cur cur-_left;} return iterator(cur);}reverse_iterator rbegin(){Node* cur _root; while (curcur-_right){cur cur-_right;} return reverse_iterator(iterator(cur));}reverse_iterator rend(){ return reverse_iterator(iterator(nullptr));}iterator end(){ return iterator(nullptr);}Node* Find(const K key){KeyOfT kot;Node* cur _root; while (cur){ if (kot(cur-_kv.first) key){cur cur-_left;} else if (kot(cur-_kv.first) key){cur cur-_right;} else{ return cur;}} return nullptr;}pairiterator, bool Insert(const T data){ //空树的情况 if (_root nullptr){_root new Node(data);_root-_col BLACK; return make_pair(iterator(_root), true);}KeyOfT kot; //查找位置插入节点Node* cur _root, * parent _root; while (cur){ if (kot(cur-_data) kot(data)){ parent cur;cur cur-_left;} else if (kot(cur-_data) kot(data)){ parent cur;cur cur-_right;} else{ return make_pair(iterator(cur), false);}}//创建链接节点cur new Node(data);Node* newnode cur; if (kot(parent-_data) kot(data)){ parent-_left cur;} else{ parent-_right cur;}cur-_parent parent;//父节点存在且为红则需要调整不能存在连续的红色节点 while (parent parent-_col RED){ //此时当前节点一定有祖父节点Node* granparent parent-_parent; //具体调整情况主要看叔叔节点 //分左右讨论 if (parent granparent-_left){Node* uncle granparent-_right; //情况1叔叔节点存在且为红 if (uncle uncle-_col RED){ //修改颜色继续向上检查granparent-_col RED; parent-_col uncle-_col BLACK;cur granparent; parent cur-_parent;} else//情况2和3叔叔节点不存在 或者存在且为黑{ //单旋(三代节点为斜线)变色 if (cur parent-_left){RotateR(granparent);granparent-_col RED; parent-_col BLACK;} else//双旋(三代节点为折线)变色{RotateL(parent);RotateR(granparent);cur-_col BLACK;granparent-_col RED;} //旋转后不需再向上调整了 break;}} else//parentgrandparent-right{Node* uncle granparent-_left; if (uncle uncle-_col RED){ parent-_col uncle-_col BLACK;granparent-_col RED;cur granparent; parent cur-_parent;} else{ if (cur parent-_right){RotateL(granparent);parent-_col BLACK;granparent-_col RED;} else{RotateR(parent);RotateL(granparent);cur-_col BLACK;granparent-_col RED;} break;}}}//确保根节点为黑_root-_col BLACK; return make_pair(iterator(newnode), true);}bool IsRBTree(){ if (_root nullptr){ return true;}if (_root-_col RED){cout 根节点为红色 endl; return false;}int Blacknum 0;Node* cur _root; while (cur){ if (cur-_col BLACK)Blacknum;cur cur-_left;}int i 0; return _IsRBTree(_root, Blacknum, i);}private:void _Destory(Node* root){ if (root nullptr) return;_Destory(root-_left);_Destory(root-_right);delete root;root nullptr;}bool _IsRBTree(Node* root, int blacknum, int count){ if (root nullptr){ if (blacknum count) return true;cout 各路径上黑色节点个数不同 endl; return false;}if (root-_col RED root-_parent-_col RED){cout 存在连续红色节点 endl; return false;}if (root-_col BLACK)count;return _IsRBTree(root-_left, blacknum, count) _IsRBTree(root-_right, blacknum, count);}void RotateL(Node* parent){Node* subR parent-_right;Node* subRL subR-_left;Node* parentP parent-_parent;parent-_right subRL; if (subRL){subRL-_parent parent;}subR-_left parent; parent-_parent subR;if (parent _root){_root subR;subR-_parent nullptr;} else{subR-_parent parentP; if (parentP-_left parent){parentP-_left subR;} else{parentP-_right subR;}}}void RotateR(Node* parent){Node* subL parent-_left;Node* subLR subL-_right;Node* parentP parent-_parent;parent-_left subLR; if (subLR){subLR-_parent parent;}subL-_right parent; parent-_parent subL;if (parent _root){_root subL;subL-_parent nullptr;} else{subL-_parent parentP; if (parentP-_left parent){parentP-_left subL;} else{parentP-_right subL;}}}private:Node* _root; };2、map的封装具体实现代码namespace cole { templateclass K, class V class map{ struct MapOfKey{ const K operator()(const pairK, V kv) { return kv.first;}}; public: typedef typename RBTreeK, pairconst K, V, MapOfKey::iterator iterator; typedef typename RBTreeK, pairconst K, V, MapOfKey::reverse_iterator reverse_iterator;iterator begin() { return _t.begin();}iterator end() { return _t.end();}reverse_iterator rbegin() { return _t.rbegin();}reverse_iterator rend() { return _t.rend();}pairiterator, bool insert(const pairconst K, V kv){ return _t.Insert(kv);}V operator[](const K key){pairiterator, bool ret insert(make_pair(key, V())); return ret.first-second;}iterator find(const K key) { return _t.Find(key);}private:RBTreeK, pairconst K, V, MapOfKey _t;}; }3、set的封装具体实现代码namespace cole { templateclass K class set{ struct SetOfKey{ const K operator()(const K key) { return key;}}; public: typedef typename RBTreeK,K, SetOfKey::iterator iterator; typedef typename RBTreeK,K, SetOfKey::reverse_iterator reverse_iterator;iterator begin() { return _t.begin();}iterator end() { return _t.end();}reverse_iterator rbegin() { return _t.rbegin();}reverse_iterator rend() { return _t.rend();}pairiterator, bool insert(const K key){ return _t.Insert(key);}iterator find(const K key) { return _t.Find(key);}private:RBTreeK, K, SetOfKey _t;}; }*声明本文于网络整理版权归原作者所有如来源信息有误或侵犯权益请联系我们删除或授权事宜。戳“阅读原文”我们一起进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

营销型网站搭建专业做网站价格

2020年.NET Core逆袭冲榜,多榜直接冠军!Build2020,发布多款产品赋能.NET开发者!截止5月,腾讯,阿里,特斯拉等大厂都在招聘.NET!这些征兆,都预示着.NET的春天即将到来&…

学校的网站管理系统广州番禺哪里有学网站建设

黑客攻防,一个看似神秘,但却必不可缺的领域。近期,全球网络与安全融合领域领导者Fortinet(Nasdaq:FTNT),开启了Fortinet DEMO DAY系列实战攻防演练线上直播,让人人都能零距离观摩黑客…

重庆做app开发的公司通州微网站优化

NHibernate是把Java的Hibernate核心部分移植到Microsoft .NET Framework上。它是一个对象关系映射工具,其目标是把.NET对象持久化到关系数据库。 NHibernate 是一个面向.NET 环境的对象/关系数据库映射工具。对象关系映射(O/R Mapping,Object Relational…

更改网站主题造价员证在哪个网站上查询

推荐阅读:闭关修炼21天,“啃完”283页pdf,我终于4面拿下字节跳动offer肺炎在家“闭关”,阿里竟发来视频面试,4面顺利拿下offer字符集是一套符号和编码的规则,不论是在oracle数据库还是在mysql数据库&#x…

商洛免费做网站公司emlog转换wordpress

在第一次下载软件时,目录中配了一个使用说明,说是需要通过start.bat 这个文件来启动程序,而这个 start.bat 就是始作俑者: 病毒作者比较狡猾,其中start.bat 用记事本打开是乱码,但是可以通过将这个批处理…

河南省建设工程监理协会网站设计说明书包括哪些内容

Tableau入门 1、Tableau概述2、Tableau Desktop2.1、初识Tableau Desktop2.2、Tableau工作区2.3、数据窗格与分析窗格2.4、功能区和标记卡2.4.1、列和行功能区2.4.2、标记卡2.4.3、筛选器功能区2.4.4、页面功能区2.4.5、附加功能区、图例、控件 3、Tableau视图4、Tableau工作簿…

长春网络公司做网站云南住房和城乡建设局网站

组件开始设计是针对以接口的方式来定义HTTP/HTTPS访问,虽然基于接口来操作有很大的便利性,但定义起来就比较麻烦了。所以在1.5版本中实现了一个HttpClient类来简化调用。HttpClient 该类支持HTTP的GET,POST,DELETE和PUT操作,通过这几个…

金华企业网站建设网站建设重要意义

问题描述: 想在不同目录下导入根目录的包,直接写会报错。如下边object_detect.py在function文件夹下,导入包默认在这个文件下,但我想导入根目录models和utils下的包 解决方法: 将根目录设置为源代码根目录&#xff0…

专业网站建设公司哪里济南兴田德润什么活动哪些做网站的公司比较好

1.安装教程激活 输入的激活网址: http://idea.imsxm.com/ 2.汉化教程 软件适用于:webstorm2017.2以及以上,如有需要可直接加本人QQ 1940694428。 转载于:https://www.cnblogs.com/cisum/p/7919712.html

北京网站制作公司兴田德润可以不常州视频剪辑培训机构

公章是公司处理内外部事务的印鉴,公司对外的正式信函、文件、报告使用公章,盖了公章的文件具有法律效力。公章由公司的法定代表人执掌,法定代表人如果把法定代表人章与公章一同使用就代表公司行为。 随着社会数字化转型,电子印章及…

企业建设网站目的是什么意思黄冈免费网站推广平台汇总

css实现自定义按钮的样式实际上很早就有了,只是会用的人不是很多,里面涉及到了最基础的css写法,在火狐中按钮还是会显示出来,这时需要将i标签的背景设置为白色,同时z-index设置比input高一些,这样才可以把按…

网站管理工作流程简单的网页设计主题

目录 && --- 逻辑与操作符 || --- 逻辑或操作符 && --- 逻辑与操作符 逻辑与操作符有并且的意思,一般用于判断语句中 逻辑与操作符运行规则是都要为真,才会继续执行或计算 360笔试题: 有关前置(--),后置(-…

腾讯广告投放端提供的建站工具有三亚房地产网站制作

java ee的小程序如果我不喜欢夏天的一件事,那就是事实是没有太多要分享或谈论的新闻。 谁决定将Java Day Tokyo置于今年的这个无聊的时间里,做得很好,并给了我一个写关于新的和即将到来的Java EE 8规范的博客帖子的机会,其中丰富了…

邢台移动网站建设价格wordpress改变友情链接顺序

全世界只有3.14 % 的人关注了青少年数学之旅【1】【2】【3】【4】【5】【6】【7】【8】【9】

科技软件公司网站模板企业网站开发与设计论文

首先转换pytorch->onnx->param模型,这个过程可以查资料步骤有点多,参考blog.51cto.com/u_15660370/6408303,这里重点讲解转换后部署。 测试环境: ubuntu18.04 opencv3.4.4(编译过程省略,参考我其他博客) 安装…

网站设计 模板外贸企业网页制作

2024年6月1日上午,横店影视华翰传媒集团携手腾烨影视隆、明艺影视重举办了横店影视基地的开业庆典。这一盛事不仅标志着华翰传媒集团在影视行业发展的重要里程碑,更彰显了其深耕影视产业、致力于打造高质量影视内容的决心与目标。 活动盛况空前&#xff…

网站建设常州青之峰百度网页版下载

一直以来听的多了,什么UDP广播之类的,不过自己一直没有试验过,这次闲来无聊,于是测试了一下。网上说的其实并不是非常的正确,流传着不少的错误言论,这次自己动手测试了一下,没想到比我想象中的还…

聊城专业建wap网站网站开发教程

Java中的面向对象设计原则与实践 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 引言 面向对象设计原则是软件工程中的重要概念,它们指导着我们如…

网站建设项目报告书网站建设湖南岚鸿建设

Python常见基础数据结构 字符串字符串的构造字符串是一种序列正向索引负向索引有限切片无限切片查询方法压缩方法替换方法格式化插入分割方法 列表列表构造列表同样属于序列列表的元素增加列表其他方法 元组字典字典的构造字典不属于序列字典可变 字符串 字符串的构造 • 单引…

网站设计需求说明书外国网站接单做翻译

文章目录 一、TCP/IP1.1、TCP/IP概念TCP/IP是什么TCP/IP的作用TCP/IP的特点TCP/IP的工作原理 1.2、TCP/IP网络发展史1.3、OSI网络模型1.4、TCP/IP网络模型1.5、linux中配置网络网络配置文件位置DNS配置文件主机名配置文件常用网络查看命令 1.6、windows中配置网络CMD中网络常用…