(资料图)
刚毕业同学,找工作常被问 二维数组转树,树转二维数组 需要支持无限层级实现,如果你了解这个语言那么实现起来还要一番思考
c++ web框架 paozhu使用 需要实现数据库表数据到前台菜单实现,就是这种功能 二维数组转树,树转二维数组 保存时候树二维数组,展示时候树树状。
这个技术难点在于无限递归,这个树程序基本原理
现在看看c++怎么实现的,无限递归,家肯定是考虑到结构体 嵌套自己定义。
struct department_outjson_t{ unsigned int id = 0; unsigned int parentid = 0; bool isopen = true; bool _is_use = false; std::string title; std::string desc; std::vectorchildren;};
department_outjson_t 就是结构体 嵌套定义我们看看怎么实现的,先上代码,使用了模板
templateconcept ishas_isuse_member = requires(deps_json_type m) { m._is_use; };template requires ishas_isuse_member void array_to_tree(std::vector &targetdata, std::vector &sourcedata){ if (targetdata.size() == 0) { for (unsigned int i = 0; i < sourcedata.size(); i++) { if (sourcedata[i].parentid == 0) { targetdata.push_back(sourcedata[i]); sourcedata[i]._is_use = true; } } } for (unsigned int i = 0; i < sourcedata.size(); i++) { if (sourcedata[i]._is_use == false) { for (unsigned int j = 0; j < targetdata.size(); j++) { if (targetdata[j].id == sourcedata[i].parentid) { targetdata[j].children.push_back(sourcedata[i]); sourcedata[i]._is_use = true; array_to_tree(targetdata[j].children, sourcedata); } } } }}
就是这样可以实现了,注意是使用了扫描,怕影响性能,我用一个变量标注,当然也可以用保存地址方式。
顺便把 树转二维数组也实现了
templatevoid tree_to_array(std::vector &targetdata, std::vector &sourcedata, unsigned int parendid = 0){ for (unsigned int i = 0; i < sourcedata.size(); i++) { if (sourcedata[i].parentid == parendid) { if (sourcedata[i].children.size() > 0) { deps_json_type temp = sourcedata[i]; temp.children.clear(); targetdata.push_back(temp); tree_to_array(targetdata, sourcedata[i].children, sourcedata[i].id); } else { targetdata.push_back(sourcedata[i]); } } }}
这样给前端api多爽,前端也不用自己处理,每次提交整个树过来就可以了,看完是不是明白了,主要是控制id 和 parentid
更多paozhu有趣特性 以后一一介绍。
✅ 1. 自带json编解码不用第三方库,标准json支持✅ 2. 支持多域名网站✅ 3. 支持多域名ssl 服务端✅ 4. 支持http/1.1、http/2协议✅ 5. 支持websocket服务端✅ 6. 框架自带websocket推送,支持定时推送到webscoket客户端✅ 7. 支持同步httpclient get post✅ 8. 框架自带ORM,使用链接池方式,目前支持mysql✅ 9. 框架自带线程池,和用户代码运行的线程池✅10. 框架使用asio自带的协程✅11. 框架特色是I/O 使用协程池 用户代码运行使用线程池,类似GO那种调度,只是针对http请求调度✅12. 框架支持普通文件gzip、br,并支持缓存到磁盘,下次不用cpu再压缩✅13. 框架解析URL和POST,解析结果类似PHP GET POST方式获取内容✅14. 自带sendmail类库✅15. 生成二维码(qrcode),需要gd、qrencode库✅16. 插件化编程,热动态更新,使用动态库方式✅17. 框架内置通用数据缓存模块,ORM结果缓存,提高并发能力✅18. 框架controller目录注解功能,方便添加URL路由映射,降低入门心智✅19. 结构和类注解JSON功能,使用json_encode json_decode操作
https://github.com/hggq/paozhu
上一篇:架设电网防野猪,不料电死路过人 检察机关以案说法走进乡村
下一篇:最后一页
X 关闭
- 1、面试最常问的数组转树,树转数组 c++ web框架paozhu实现 环球热点
- 2、架设电网防野猪,不料电死路过人 检察机关以案说法走进乡村
- 3、天天最资讯丨今天金价多少钱一克(2023年4月24日)
- 4、环球快播:传化智联:截至2023年4月21日 公司的累计担保总额为约24.41亿元
- 5、鹰击长空 如虎添翼 途虎养车、东风鹰击轮胎携手电影《长空之王》联合开启五一出行养车季 焦点讯息
- 6、果然发布|预计二季度山东经济将持续向好!上半年呈现稳开高走的良好态势
- 7、高金铎_关于高金铎简述
- 8、今年“五一”假期 28万株花卉扮靓天安门广场
- 9、15:01 国内商品期货收盘多数下跌 黑色系跌幅居前_环球新视野
- 10、鬼吹灯拍了几部电视剧_鬼吹灯电视剧有几部 世界聚焦
-
荀卿与李斯:到同一家大公司求职,为何老师失败了,学生却成功了?
2023-04-24
-
【全球报资讯】仰望星空 追逐梦想 中国航天不止奇迹
2023-04-24
-
2023北京大学肿瘤医院五一放假吗?门诊安排一览 当前要闻
2023-04-24
-
全国碳市场今日收盘价与前一日持平,报53.40元/吨
2023-04-24
-
浙江嵊州:产才双向赋能 奋力打造中国式现代化县域实践样板|世界热点评
2023-04-24