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

c++26新功能—hive容器

一、容器的演进

科学进步的过程一般来说都是从先解决常用的、迫切的问题开始,然后再逐步解决一些少见不迫切的问题,直到最终解决到认知程度内的诸多问题。举一个网上的例子,以前说咱们无法生产水笔的尖头上的钢球,其实这对于国内的技术来说并不难,只是并不迫切而且利润也有限,结果经常的提及就被当成一个问题了,很快就解决了。
C++作为一门技术,也是如此。STL中的容器,也是先从常见的向量、链表以及映射等等开始应用,然后是unordered_map等。大家都知道C++应用的一个重要场景就是游戏应用,而游戏应用中对数据结构往往有一些特殊的要求,如高频的读写操作以及非线性的存储等。而且还有一个重要的需求,那就是写入和删除时容器的迭代器是否失效。
在容器上的应用是如此,在底层的容器对数据的处理要求也在提高,如何能够更好的最大的发掘出内存潜力,也是STL容器的一个发展方向。在前面分析过内存的管理,其实不管怎么做,其实就是将内存的连续分配、按块分配等有机的组合在一起,能够平衡内存的应用、管理以及效率的一种方法。

二、std::hive的应用

std::hive(蜂巢)这个容器正是从上面的需求,也就是游戏的需求出发点提出的。它最初是colony(plf::colony)开源库发展过来的。std::hive的主要特点有:
1、高频增删场景下的高性能
所有的高性能都是相对的,此处的高性能也是如此,即std::hive的高性能是与传统的链表list和向量vector等相比而言。其读写的复杂度均为O(1)。
2、对容器增删场景下的迭代器的安全稳定性
std::hive的插入操作对迭代器来说是安全的、稳定的;但对于删除来说,其指向被删除元素的迭代器失效。
3、内存尽最大可能的高利用性
std::hive对内存采用了分块处理的方式,在应用场景下可尽大可能发挥容器对内存利用的效率并降低内存碎片的数量。既然是内存分块(块内内存连续),则其支持非连续内存的访问即支持任意位置的增删。看过前面的内存相关文章的可以把这些块当成一个个的桶即bucket。

从相关的文档可发现,std::hive的实现的思路是skipfield,它能够高效的解决高速频繁地遍历、添加和删除大量对象的问题进而达到优化内存管理和减少内存碎片化数量的结果。通过研究相关的文档分析,skipfield和skiplist在某些思想上有异曲同工的意思。

三、例程

在分析了std::hive后,看一下相关的例程:

#include <std_hive>  int main() {std::hive<int> h;// inserth.insert(1); h.insert(2);auto it = h.insert(3); // delh.erase(it);   // traversefor (auto& v : h) {std::cout << v << ","<<std::endl;  }return 0;
}

对开发者来说,std::hive的应用还是相当简单的,不必太过费心。

四、总结

C++标准的演进与现实世界的解决问题的思路是一致的。也就是说,虚拟世界其实就是现实世界的一种映射,大家对编程的认知越高,就越会明白这个道理。同样,要想解决好问题,就不必拘泥某一个场景某一个行业,要融会贯通。古人云:“它山之石,可以攻玉”!

http://www.lqws.cn/news/464221.html

相关文章:

  • 税务 VR 虚拟体验,带来全新办税感受
  • 【软考高级系统架构论文】论NoSQL数据库技术及其应用
  • HarmonyOS 5的分布式通信矩阵是如何工作的?
  • 鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(1/3)
  • 在AI普及的大环境下神经网络在新能源汽车热管理系统中的应用简介
  • 无线Debugger攻防全解:原理剖析与突破之道
  • Qt中的布局
  • 深入浅出:Go语言中的Cookie、Session和Token认证机制
  • 关于 Kyber:抗量子密码算法 Kyber 详解
  • 首页实现多级缓存
  • 【信号与系统四】采样和通信系统
  • rent8_wechat-最常用出租屋管理系统-微信小程序
  • Mac Parallels Desktop Kali 2025 代理设置
  • 外卖之后再度进军酒旅,京东多线出击的逻辑是什么?
  • Electron 开发桌面应用概述
  • 跟着AI学习C# Day27
  • Pytorch3D 中涉及的知识点汇总
  • 【Flutter】状态管理框架Provider和Get对比分析(面试常用)
  • Python内存使用分析工具深度解析与实践指南(下篇)
  • 江科大STM32入门:DMA传输数据
  • java 找出两个json文件的不同之处
  • 神经网络中的均方误差(Mean Squared Error)详解
  • 自定义OceanBase集群安装并使用OCP接管集群
  • 【DCS开源项目】—— Lua 如何调用 DLL、DLL 与 DCS World 的交互
  • LeetCode第279题_完全平方数
  • Vue3 的生命周期:从 Composition API 视角看
  • DeepEP开源MoE模型分布式通信库
  • Linux运维新人自用笔记(Ubuntu磁盘命名规则、新磁盘分区、主流文件系统类型、mkfs命令格式化文件系统、临时和永久挂载、挂载报错、dd指令)
  • 2.7 Python方法调用机制解析:从描述符到字节码执行
  • 5.2 Qt Creator 使用FFmpeg库