刚毕业同学,找工作常被问 二维数组转树,树转二维数组 需要支持无限层级实现,如果你了解这个语言那么实现起来还要一番思考

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::vector<department_outjson_t> children; };
department_outjson_t 就是结构体 嵌套定义
我们看看怎么实现的,先上代码,使用了模板

template <typename deps_json_type>
concept ishas_isuse_member = requires(deps_json_type m) { m._is_use; }; template <typename deps_json_type>
requires ishas_isuse_member<deps_json_type>
void array_to_tree(std::vector<deps_json_type> &targetdata,
std::vector<deps_json_type> &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);
}
}
}
}
}

就是这样可以实现了,注意是使用了扫描,怕影响性能,我用一个变量标注,当然也可以用保存地址方式。

顺便把 树转二维数组也实现了

template <typename deps_json_type>
void tree_to_array(std::vector<deps_json_type> &targetdata,
std::vector<deps_json_type> &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

面试最常问的数组转树,树转数组 c++ web框架paozhu实现的更多相关文章

  1. 【搞定 Java 并发面试】面试最常问的 Java 并发进阶常见面试题总结!

    本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.觉得内容不错 ...

  2. 前端面试angular 常问问题总结

    1. angular的数据绑定采用什么机制?详述原理 angularjs的双向数据绑定,采用脏检查(dirty-checking)机制.ng只有在指定事件触发后,才进入 $digest cycle : ...

  3. 面试中常问的List去重问题,你都答对了吗?

    面试中经常被问到的list如何去重,用来考察你对list数据结构,以及相关方法的掌握,体现你的java基础学的是否牢固. 我们大家都知道,set集合的特点就是没有重复的元素.如果集合中的数据类型是基本 ...

  4. 【搞定 Java 并发面试】面试最常问的 Java 并发基础常见面试题总结!

    本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.欢迎 Sta ...

  5. 面试中常问的五种IO模型和BIO,NIO,AIO

    一,五种IO模型: 一个IO操作可以分为两个步骤:发起IO请求和实际的IO操作例如:1.操作系统的一次写操作分为两步:第一步,将数据从用户空间拷贝到系统空间:第二步,从系统空间往网卡写.2.一次读操作 ...

  6. Android相关面试题---面试官常问问题

    版权声明:本文为寻梦-finddreams原创文章,请关注: http://blog.csdn.net/finddreams/article/details/44513579 一般的面试流程是笔试完就 ...

  7. Java面试中常问的数据库方面问题

    MySQL 为什么用自增列作为主键 如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引.如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作 ...

  8. 面试--hr常问的问题

    程序员换工作,会有技术面试(可能不止一轮的技术面),还会有hr的面试,技术面主要是偏向于技术问题,hr面试主要问的一些问题,下面做下汇总: 1.你换工作的原因,你为何辞职 必问的问题,送分题或者送命题 ...

  9. 聊聊面试中常问的GC机制

    GC 中文直译垃圾回收,是一种回收内存空间避免内存泄漏的机制.当 JVM 内存紧张,通过执行 GC 有效回收内存,转而分配给新对象从而实现内存的再利用. JVM GC 机制虽然无需开发主动参与,减轻不 ...

  10. Linux 面试最常问的十个问题

    如果你要去面试一个Linux系统运维工程师的职位,下面这十个最常见的问题一定要会,否则你的面试可能就危险了.这些都是比较基本的问题,大家要理解,不能光死记硬背. 1.如何查看系统内核的版本 这里有两种 ...

随机推荐

  1. Collectors类的静态工厂方法-《Java 8实战》笔记

  2. Blog作业01

    目录 前言 设计与分析 踩坑心得 改进建议 总结 前言 这三次作业的知识点覆盖的很全面,从最开始的int赋值变量,循环,到Boolean值,sort等一些函数,到后来的对象,类的创建和声明,gette ...

  3. Python ssh远程登录设备执行命令

    # -*-encoding:utf-8 -*- """ @Time : 2022/12/30 10:10 @Auth : ruqing @File :ssh_sonic. ...

  4. Navicat 连接MySQL数据库 报错2059

    Navicat 连接MySQL数据库 报错2059 - authentication plugin 'caching_sha2_password'的解决办法 2059 - Authentication ...

  5. 接口自动化框架两大神器-正则提取器和Jsonpath提取器

    一 接口自动化框架 一 框架结构 二 结构说明 - API 用于封装被测系统的接口(用request模块封装的请求方法) - TestCase 将一个或多个接口封装成测试用例,并使用UnitTest管 ...

  6. Java日常

    学习Java第3天的小总结 一.感受总结 Java是目前市场上的主流语言,相对于C和C++语言来说,竞争更为激烈,而这一大特点也在激励着我不断去探索,去学习: 在下载相应编译环境的过程中,由于IDEA ...

  7. 「java技术干货」switch分支结构详解

    前言 在上一篇文章中,壹哥给大家介绍了Java里的顺序.分支.循环结构的概念,并且重点给大家讲解了分支结构中的条件分支.并在条件分支中,详细地给大家讲解了if条件分支的使用.现在我们应该知道,if条件 ...

  8. 从pcap文件中提取pcma音频

    操作系统 :Windows10_x64 .CentOS 7.6.1810_x64 wireshark版本:3.6.12 Python 版本  :  3.9.12 一.背景描述 工作中有时候会遇到需要从 ...

  9. 安全测试之探索 windows 游戏扫雷

    作者:京东工业 宛煜昕 扫雷游戏相信很多人都从小玩过,在那个电脑游戏并不多的时代,扫雷成为玩的热度蛮高的一款游戏之一,然而就在有一次,接触到了一次不寻常的扫雷过程,使得后来我也有了这个冲动,也来做一次 ...

  10. 聊聊Spring扩展点BeanPostProcessor和BeanFactoryPostProcessor

    介绍 今天聊一聊spring中很重要的两个扩展点BeanPostProcessor和BeanFactoryPostProcessor,spring之所以如次强大,是因为它提供了丰富的功能给我们使用,但 ...