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

科技资讯 投稿 13300 0 评论

面试最常问的数组转树,树转数组 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;
        }
      }
    }
  }
}

 

 

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

 

更多paozhu有趣特性 以后一一介绍。

✅ 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实现

赞同 (64) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽