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.pswp.cn/news/911858.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/911858.shtml
英文地址,請注明出處:http://en.pswp.cn/news/911858.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kafka 源碼剖析:消息存儲與協議實現(二)

四、協議實現機制探秘 4.1 生產者協議 4.1.1 消息發送流程 Producer 在向 Kafka 集群發送消息時&#xff0c;首先會根據分區策略選擇目標分區 。常見的分區策略有輪詢、按消息鍵的哈希值分區以及自定義分區策略 。如果生產者在發送消息時指定了分區號&#xff0c;那么消息就…

Vue.js 與 TypeScript:最佳實踐

1. 引言 Vue.js 是一個漸進式、靈活的 JavaScript 框架&#xff0c;廣泛用于構建用戶界面和單頁應用&#xff08;SPA&#xff09;。而 TypeScript 是 JavaScript 的一個超集&#xff0c;添加了靜態類型和其他高級特性。將兩者結合使用&#xff0c;可以幫助開發者構建更具可維護…

webpack5 css-loader:從基礎到原理

webpack 處理樣式 webpack本身是不能識別樣式資源的&#xff0c;需要借助Loader來幫助webpack解析樣式資源&#xff0c;樣式資源包括但不限于css/less/sass/scss/styl 未使用樣式處理加載器前 運行webpack打包命令 bash npx webpack報錯信息如圖&#xff0c;提示無法識別css…

【GESP】C++三級練習 luogu-B2096 直方圖

GESP C三級練習&#xff0c;一維數組練習&#xff0c;難度★★☆☆☆。 題目題解詳見&#xff1a;【GESP】C三級練習 luogu-B2096 直方圖 | https://www.coderli.com/gesp-3-luogu-b2096/ 【GESP】C三級練習 luogu-B2096 直方圖 | OneCoderGESP C三級練習&#xff0c;一維數組…

【網站內容安全檢測】之2:從網站所有URL頁面中提取所有外部及內部域名信息

還沒寫成Go的&#xff0c;用Python吧&#xff0c;稍微慢一點 依賴內容&#xff08;安裝命令pip install -r requirements.txt) requirements.txt aiohttp beautifulsoup44.12.2 tqdm4.66.1 redis5.2.1 motor3.3.1 pymongo4.6.0 chardet提取域名的程序 domain_extractor.py …

【LLaMA-Factory 實戰系列】四、API 篇 - 部署推理服務與批量調用實戰

【LLaMA-Factory 實戰系列】四、API 篇 - 部署推理服務與批量調用實戰 1. 引言2. 推理后端的選擇與對比3. 部署 API 推理服務3.1 創建 API 配置文件3.2 啟動 API 服務3.3 探索交互式 API 文檔 4. 編寫 Python 腳本進行批量調用4.1 準備工作4.2 批量調用腳本4.3 運行腳本并查看結…

C++工廠模式的作用(工廠方法、Factory Method、Factory Pattern)

文章目錄 代碼示例工廠的作用1. 對象創建的封裝 &#x1f3ed;2. 解耦客戶端和具體類 &#x1f517;3. 統一的創建入口 &#x1f6aa;4. 隱藏實現細節 &#x1f3ad; 在這個項目中的具體體現總結 代碼示例 https://gitee.com/arnold_s/my-learning-test/tree/master/20250610_…

9-C#修改任務管理的名稱

C#修改任務管理的名稱

Fisco Bcos學習 - 搭建第一個區塊鏈網絡

文章目錄 一、前言二、環境準備三、安裝依賴在 macOS 上安裝依賴在 Ubuntu 上安裝依賴在 CentOS 上安裝依賴 四、創建操作目錄并下載安裝腳本五、搭建單群組 4 節點聯盟鏈六、啟動 FISCO BCOS 鏈七、檢查進程八、檢查日志輸出 在數字化時代&#xff0c;區塊鏈技術正逐漸成為推動…

可視化圖解算法53:表達式求值

牛客網 面試筆試 TOP 101 1. 題目 描述 請寫一個整數計算器&#xff0c;支持加減乘三種運算和括號。 數據范圍&#xff1a;0≤∣s∣≤100&#xff0c;保證計算結果始終在整型范圍內 要求&#xff1a;空間復雜度&#xff1a; O(n)&#xff0c;時間復雜度 O(n) 示例1 輸入…

小白成長之路-Nginx配置(二)

文章目錄 一、localtion配置1.匹配規則2.匹配優先級3.配置案例 二、rewrite1、 語法2、 可寫入字段3 配置案例4 if 指令5.sutoindex6. nginx配置中的常用變量 三、配置Nginx狀態統計1.下載vts模塊2.編譯nginx 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案例可供參…

Qt的第一個程序

Qt的第一個程序 1.hello world2.使用圖形化拖拽方式3.使用C代碼的方式3.1.頭文件3.2.setText3.3.對象樹 4.設計MyLabel5.亂碼問題 &#x1f31f;&#x1f31f;hello&#xff0c;各位讀者大大們你們好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f680;系列專欄&#xff…

圖書數據接口

基本說明&#xff1a; 接口地址&#xff1a;http://data.isbn.work/openApi/getInfoByIsbn?isbn{isbn}&appKey{appkey}返回格式&#xff1a;json請求方式&#xff1a;get請求示例&#xff1a;http://data.isbn.work/openApi/getInfoByIsbn?isbn9787513159074&appKey…

MongoDB原理

目錄 一、概念 二、架構 2.1 邏輯結構 2.2 數據模型 2.3 存儲引擎&#xff1a;WiredTiger 三、事務 一、概念 MongoDB是文檔數據庫&#xff0c;基本存儲單元是 文檔&#xff08;Document&#xff09;&#xff0c;以BSON格式&#xff08;一種類json的二進制形式&#xff…

《解碼音頻:從基礎到未來的聽覺探索》

音頻&#xff1a;開啟聲音世界的大門 在生活的每一個角落&#xff0c;音頻如影隨形&#xff0c;編織出豐富多彩的聽覺體驗。清晨&#xff0c;第一縷陽光尚未完全照進房間&#xff0c;手機里溫柔的鬧鐘鈴聲&#xff0c;將我們從睡夢中輕輕喚醒&#xff0c;開啟活力滿滿的一天。通…

web安全之h2注入系統學習

起初是在N1 Junior 2025 上面碰到一題&#xff0c;考點是h2的sql注入。由于之前沒有見過&#xff0c;趁此機會系統學習一番 實驗代碼 public class H2Inject {public static void main(String[] args) throws Exception{JdbcDataSource dataSource new JdbcDataSource();dataS…

AWS認證系列:考點解析 - cloud trail,cloud watch,aws config

&#x1f3af;一句話總覽&#xff1a; 服務名類比/角色主要功能CloudTrail監控攝像頭錄像回放記錄“誰在什么時候做了什么操作”CloudWatch護士測體溫 護士喊醫生實時監控系統狀態&#xff0c;并能報警/自動應對AWS Config保安巡邏 記錄資產變更歷史記錄 AWS 資源的“配置狀…

Java八股文——數據結構「數據結構篇」

了解哪些數據結構&#xff1f; 面試官您好&#xff0c;我了解并使用過多種數據結構。在我的理解中&#xff0c;數據結構可以分為幾個大的類別&#xff0c;每一類都有其獨特的優勢和適用場景。 1. 線性結構 (Linear Structures) 這類結構的特點是數據元素之間存在一對一的線性…

C#測試調用EPPlus根據批注設置excel單元格內容

EPPlus也是常用的Excel文件操作庫&#xff0c;但不同于ClosedXML&#xff0c;使用EPPlus前需要設置授權信息&#xff0c;商業應用需要設置商業授權&#xff0c;個人使用或非商業應用也需要設置授權&#xff08;測試的時候只需設置全名&#xff0c;保存excel文件時會保存到文件詳…

windows本地搭建skywalking, 線程池中traceId不丟失

1.從官網下載9.0.0版本 Downloads | Apache SkyWalking 其它歷史版本的 下載地址 Index of /dist/skywalking 這個頁面 可以下載 apm服務: apache-skywalking-apm-9.0.0.tar.gz agent的包: apache-skywalking-java-agent-9.0.0.tgz 2.解壓后, (看情況去config路徑下 appli…