面试最常问的数组转树,树转数组 c++ web框架paozhu实现

这篇具有很好参考价值的文章主要介绍了面试最常问的数组转树,树转数组 c++ web框架paozhu实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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);
        }
      }
    }
  }
}

 文章来源地址https://www.toymoban.com/news/detail-423944.html

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

 

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

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实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot实践(四十三):整理面试常问的问题

    1、Spring和springBoot和SpringCloud分别是什么及区别; Spring是一个框架,包含很多模块,比如core,jdbc,dao,mvc,国际化等等; SpringBoot可以理解是spring的脚手架,快速地使用Spring进行集成开发,把spring的多个模块都集成在内,提供很简单的配置方式使用; SpringCloud是1个微服务框架

    2024年02月06日
    浏览(37)
  • 面试常问的Linux之 I/O 复用

    在Linux系统中,I/O(输入/输出)指的是计算机系统的数据交换过程,包括从外部设备读取数据(输入)和将数据发送到外部设备(输出)。I/O操作是Linux系统中非常重要的一个方面,因为大多数应用程序都需要读取和写入数据。 在Linux中,I/O可以分为两类:阻塞I/O和非阻塞I

    2023年04月22日
    浏览(28)
  • 2023 Android面试官 常问的问题以及答案(附最新的Android面试大厂必考174题 )

    已经2023了 但是计算机的寒冬还没有过去 ,但是我们程序员的热情不会被磨灭(有钱就干 越多越有劲)。在这个金三银四的季节 许多公司也发布了更多的招聘岗位 面试机会多了 那我们跟要把握住。以下分享一些面试题给大家,希望能帮到大家找一份好工作。 1.Android与服务

    2023年04月09日
    浏览(37)
  • CSS mask 实现鼠标跟随镂空效果,这些面试官常问的开发面试题你都掌握好了吗

    可能一开始无从下手,不要急,可以先从简单的、类似的效果开始,一步一步尝试,一起看看吧。 一、普通半透明的效果 比如平时开发中碰到更多的可能是一个半透明的效果,有点类似于探照灯(鼠标外面的地方是半透明遮罩,看起来会暗一点)。如下: 那先从这种效果开

    2024年04月28日
    浏览(160)
  • 【Vue 面试题10道】我好像之前想过要写,不过之前JavaScript面试题比较多,就暂时略过了,这些应该几乎把常问的都包括了

    博主: _LJaXi Or 東方幻想郷 专栏: 前端面试题 开发工具: Vs Code 本题针对 Vue2 这些几乎把常用的都包括了,问别的就没意思了,毕竟工作拧螺丝嘛 我都好久不用Vue了,不过用了React再回看Vue感觉好简单啊… 其实工作上都很快能捡起来,就是面试问题可能是必须的,接着往下

    2024年02月16日
    浏览(33)
  • 前端常问的几种网络安全攻击类型

    就是攻击者想尽一切办法将可以执行的代码注入到网页中。 存储型(server端): 场景:见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等。 攻击步骤: i)攻击者将恶意代码提交到目标网站的数据库中 ii)用户打开目标网站时,服务端将恶意代码从数

    2024年02月06日
    浏览(33)
  • 用文心一言把欧小鹏里常问的问题问了一遍

    个人主页 | OpenI注册地址 | Github主页 欧小鹏, 针对LLM的社群机器人. 行外人觉得特简单, 一般化; 行内人觉得有特殊价值, 还可以. 要不要给欧小鹏换个头像: 这是换, 还是不换啊? 昨天, 对于曾经在百度开源社区有着 不深刻 的\\\"从业经验\\\"以及对国产LLM抱有十分期待和十二分关注

    2024年02月09日
    浏览(28)
  • 设计模式-面试常问

    1.单例模式 保证系统中,一个类,只有一个实例,并且提供对外访问。 优点:只有一个对象,可以节省资源。适合频繁创建销毁对象的场景。 实现:要用到static,静态私有对象。暴露单例的静态方法。 (1)饿汉模式:对象放在类成员变量中,类加载时,就可以初始化实例。

    2024年02月12日
    浏览(28)
  • 死锁(面试常问)

    1.什么是死锁 简单来说就是一个线程加锁后解锁不了 一个线程,一把锁,线程连续加锁两次。如果这个锁是不可重入锁,会死锁。 两个线程,两把锁。 举几个例子,1.钥匙锁车里了,车钥匙锁家里了。2. 现在有一本书和一支笔,A拿到书,B拿到笔;A说你把笔给我,我用完再

    2024年02月04日
    浏览(28)
  • 数据库面试常问——for考研复试面试

    前言: 本人22考研党,已上岸,发一些复试准备整理的资料作为对考研准备的一个收尾。由于近几年基本都是线上复试,线上的话会更加注重概念的考察,本人在复试准备期间搜集了面试题,整理了很多资料。本文主要概括了数据库在复试面试中可能会考察的一些问题,仅供

    2023年04月23日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包