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

做网站怎么实现在线支付免费观看电影电视剧的app下载

做网站怎么实现在线支付,免费观看电影电视剧的app下载,带有网页的建筑公司,python不会的题去哪搜📝前言: 这篇文章我们来讲讲基于红黑树的map和set封装实现,文章主要分成两部分: 封装的思路及细节讲解实现完整代码汇总 红黑树封装成map和set的主要难点在于迭代器,通过本篇文章,希望能帮助你再理解红黑…

📝前言:
这篇文章我们来讲讲基于红黑树的map和set封装实现,文章主要分成两部分:

  1. 封装的思路及细节讲解
  2. 实现完整代码汇总

红黑树封装成map和set的主要难点在于迭代器,通过本篇文章,希望能帮助你再理解红黑树的迭代器的++--操作上有更深刻的理解。

🎬个人简介:努力学习ing
📋个人专栏:C++学习笔记
🎀CSDN主页 愚润求学
🌄其他专栏:C语言入门基础,python入门基础,python刷题专栏,Linux


文章目录

  • 一,封装思路和细节
    • (1)map和set同用一个红黑树模板
    • (2)迭代器的实现
      • begin和end
      • 1 ++
      • 2 --
    • (3)其他细节
  • 二,完整代码汇总

一,封装思路和细节

(1)map和set同用一个红黑树模板

我们都知道map是键值对:key : value,但是set只有键key。也就是说两个数据结构存储的数据类型是不一样的。
如果我们的红黑树模板里只传一个参数class Value
对于setValue == keyInsertFind操作都用传入这个key是行的通的。
但是对于mapValue == pairInsert操作传入的是pair,但是Find操作就不能传入pair了,因为我们要求的是按照pair的第一个元素key去找

你可以会想:为什么不能使用Value.first来比较获取key来比较呢?因为我们这里希望的是:mapset用同一个模板,如果你在RBTree里面使用了Value.first,那set也是用这个RBTree封装的,setkey的类型没有.first
(总结一句话就是RBTree实现的是泛型,不知道参数是K,还是pair<K, V>,就没办法进行比较,因为pair要拿first)

所以,为了能兼容map,RBTree就多了一个参数Key,来专门存储keystl_tree.h的源代码如下:

在这里插入图片描述
这里_Key用来存储键,用于FindErase等操作,_Val对应具体存储的数据内容。对于set_Key_Val都存储key,对应map_Key存储key_Val存储pair

这样程序员就可以用一个RBTree来同时封装set和map。把实例化的工作交给编译器,让编译器自动根据类型实例化两个不同的Tree来给set和map使用。

变成,这样:
在这里插入图片描述
节点Node中的V既可以代表set的Key也可以代表Key:Value
在这里插入图片描述

(2)迭代器的实现

源代码里面的RBTree多增加了一个头结点header,我们就不增加了。

我们的迭代器底层由指针模拟实现,迭代器的解引用和operater->()没什么好说的,和普通的容器差不多。
主要是迭代器的++--操作。因为RBTree的迭代器的遍历顺序是树的中序遍历结果。那当我们的迭代器指针指向一个节点的时候,我们怎么样正确找到中序遍历的下一个节点呢?

begin和end

begin:中序遍历的第一个节点,也就是RBTree的最左节点
end:中序遍历的最后一个节点(最右节点)的下一个节点,nullptr

1 ++

++就是要找到当前节点中序遍历的下一个节点。
首先,中序遍历的顺序是:左→根→右。
也就是说,我们要遍历的下一个节点一定不可能是当前节点的左节点,因为当前遍历完的左节点肯定在当前节点遍历之前就已经遍历完了。

所以,我们无须关注左节点,只需要关注右节点

下一个节点是什么,需要根据右子树的情况进行区分

在这里插入图片描述
自己画图,再根据中序遍历的特点很好理解这个过程的,就不过多解释了。

2 –

因为--是反着走中序遍历,所以主要关注左节点,我就直接给结论了。
在这里插入图片描述

(3)其他细节

  • 如果获取到的是迭代器是end(),要先--再操作,因为end()nullptr的迭代器。
  • while (leftmost && leftmost->_left)找最左的时候注意是leftmost->left存在的时候才往左走,即leftmost不应该指向空

二,完整代码汇总

这里展示一下迭代器++--的代码吧,因为全部代码有点多了

	Self& operator++(){if (_node->_right){Node* leftmost = _node->_right;while (leftmost && leftmost->_left) // 有左子树才往左走{leftmost = leftmost->_left;}_node = leftmost;}else{Node* cur = _node;Node* father = _node->_father;while (father && father->_right == cur){cur = father;father = father->_father;}_node = father;}return *this; // 返回的是原来的迭代器,因为是后置++}Self& operator--(){if (_node == nullptr) // end(){Node* rightmost = _root;while (rightmost && rightmost->_right){rightmost = rightmost->_right;}_node = rightmost;}else if (_node->_left){Node* rightmost = _node->_left;while (rightmost && rightmost->_right){rightmost = rightmost->_right;}_node = rightmost;}else{Node* cur = _node;Node* father = cur->_father;while (father && father->_left == cur){cur = father;father = father->_father;}_node = father;}return *this;}

leftmost代表左边最小,rightmost是右边最大

如果有需要,可以上我的Github仓库获取代码


🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!


文章转载自:

http://BDBLAs1W.hwLmy.cn
http://7tBXKfV3.hwLmy.cn
http://wS0mkMBV.hwLmy.cn
http://PsYqErcg.hwLmy.cn
http://soDK83sv.hwLmy.cn
http://CyZ84FvE.hwLmy.cn
http://pfEyvP8W.hwLmy.cn
http://rrdIvqnn.hwLmy.cn
http://RKI6flix.hwLmy.cn
http://PxudBQu8.hwLmy.cn
http://CvH1fHmF.hwLmy.cn
http://5IYJfHLB.hwLmy.cn
http://oQPVPLrI.hwLmy.cn
http://4Z0w6PN4.hwLmy.cn
http://xxDbGKRu.hwLmy.cn
http://2jJQ5GiY.hwLmy.cn
http://P8hK80Yu.hwLmy.cn
http://DEdcYJaq.hwLmy.cn
http://KUkxT2YC.hwLmy.cn
http://LDGo2mOG.hwLmy.cn
http://EPf6wVZL.hwLmy.cn
http://hslVBXMh.hwLmy.cn
http://DHvfYK30.hwLmy.cn
http://5lwuAA8r.hwLmy.cn
http://1s430Z6X.hwLmy.cn
http://ZShTRziD.hwLmy.cn
http://pWjmVKHf.hwLmy.cn
http://uA1yZ5UB.hwLmy.cn
http://BBbCLkdP.hwLmy.cn
http://vLqTt5Qt.hwLmy.cn
http://www.dtcms.com/wzjs/636858.html

相关文章:

  • 益阳市城乡和住房建设部网站wordpress另一更新正在进行
  • 温州网站建设外包android开发
  • 中国民航机场建设集团公司网站做推文的网站的推荐
  • 个人可以做网站滕州网站建设企业
  • 石家庄做网站费用品牌广告
  • 公司的网站是怎么建立青岛房地产团购网站建设
  • 临沂网站建设排名网站维护方式
  • 宿州精品网站建设开发小程序平台
  • 网站建设的指标公司网站建设方案详细方案
  • 海南景区网站建设方案WordPress清除ID沉余
  • 顺德龙江网站建设室内设计平面图讲解
  • 陕西城乡住房建设厅网站互联网服务平台官网
  • 北京公司建站模板长沙建网站一般要多少钱
  • 深圳设计网站公司网站wordpress儿童主题
  • 中山医疗网站建设为何网站打开慢
  • 网站 公司形象亳州是网站建设
  • 做淘推广的网站电商平台活动策划方案
  • 网站建设视频教程php阳江市招聘最新招聘信息
  • 做音响网站外贸电商
  • 建设外贸网站价格济南网站制作0531soso
  • 网站开发的技术风险小白的博客 wordpress
  • 好看的网站设计公司江苏中益建设官方网站
  • 莱芜关于网站建设的公司海宁高端高端网站设计
  • 通化市建设工程招投标网站php做视频分享网站
  • 做网站需要看啥书怎么创建网页链接快捷方式
  • 免费建设门户网站效果图网站推荐大全面包砖
  • 网站登录失败怎么回事怎样开自己的网站
  • 小白怎么做网站网站网络建设
  • 湛江市建设交易中心网站网站线上体系
  • 盐地网站建设公司企业建设网站的需求分析