C++ - STL #什么是STL #STL的版本 #閉源開源 #STL的六大組件

文章目錄

前言

一、什么是STL

二、STL的版本

1、原始版本

2、P.J.版本

3、RW版本

4、SGI版本

三、閉源、開源

四、STL的六大組件

總結


前言

路漫漫其修遠兮,吾將上下而求索;


一、什么是STL

STL(standard template libaray 標準模板庫):是C++標準庫的重要組成部分,不僅是一個可復用的組件庫,而且是一個包羅數據結構與算法的軟件框架;

注:標準庫指的是C++所有官方實現的庫;而STL(標準模板庫),用模板去實現常見的數據結構與算法;C++之中提供的標準庫中提供數據結構和算法的一套庫,以方便我們去使用;

Q:標準庫中除了STL還有什么?

  • IO流庫、線程庫、異常、智能指針……

二、STL的版本

STL(Standard Template Library)的設計與實現并非由C++創始人本賈尼·斯特勞斯特魯普(Bjarne Stroustrup)直接完成,而是由Alexander Stepanov、David Musser和 Meng Lee在惠普實驗室開發。該項目后來以開源方式發布,代碼開放給社區,最終被納入C++標準庫,成為現代C++的核心組成部分。STL的核心貢獻在于引入了泛型編程范式提供了容器、算法和迭代器的高效抽象,極大提升了C++的靈活性和性能表現。

注:開源有一個開源協議的要求:如果你進行了有效的修改,你也要像原始版本一樣開源(不開源的話,別人有權告你);

1、原始版本

Alexander Stepanov 、David Musser、Meng Lee 在惠普實驗室完成的原始版本,本著開源精神,他們聲明允許任何人任意運用、拷貝、修改、傳播、商業使用這些代碼,無需付費;唯一條件就是也需要向原始版本一樣做開源使用;HP版本——所有STL實現版本的始祖;

2、P.J.版本

?P.J. Plauger 基于 HP STL 開發了自己的實現,并創立了?Dinkumware?公司來提供商業化的 C/C++ 標準庫實現;不能公開或者修改,缺陷:可讀性比較差,符號命名比較怪異;?Microsoft Visual C++?長期采用 Dinkumware 的 STL (以及整個 C++ 標準庫) 作為其實現基礎。直到較新版本的 MSVC (如 VS 2019/2022 的部分版本) 才開始逐步替換為微軟自研的實現(但仍有繼承關系)

3、RW版本

由Rouge Wage 公司開發,繼承自HP版本,被?Borland C++ Builder采用,不能公開或者修改,可讀性一般;大概二十年前,Builder 比較出名的,但是后來被微軟干掉,沒人維護于是就沒落了;

4、SGI版本

由Silicon Graputer Systems ,Ins 公司開發,繼承自HP版本,被?GNU C++ Library (libstdc++)?采用作為其 STL 部分的基礎實現。而?libstdc++?是?GCC (GNU Compiler Collection)?的默認 C++ 標準庫,因此廣泛應用于?Linux?系統以及其他使用 GCC 的平臺(如早期的 Mac OS X, Cygwin, MinGW 等);SGI版本可移植性好,可公開、修改甚至販賣,從命名風格和編程風格上看,閱讀性非常高。

我們在談STL這個庫的時候需要注意在VS版本下的STL源代碼與Linux 下STL的源代碼是不一樣的;雖然P.J.版本和SGI版本會提供相同的接口,但是其底層實現是不同的(eg. string的擴容方式;在SGI版本中采用2倍擴容,但是P.J.版本是1.5 倍擴容);

三、閉源、開源

需要注意的是,計算機中的源代碼分為閉源、開源

  • 閉源由商業公司開發的,其源代碼不會對外公布;eg.Windows、mas oc?
  • 開源:eg.Linux、git? 開源就意味著免費;因為免費,所以公司的服務器都是部署在Linux 上面;如果公司有一些特殊需求,可以招一些搞內核的人,對操作系統進行一些改造(重寫驅動等)

注:Gitub 是利用git 這個開源項目去搭建的網站而形成的一個“社會”;

Q: 閉源與開源分別有什么優缺點?

  • 開源的項目如果不是特別出名,是很難維護起來的,即使比較出名的開源項目可能到一定的階段就有可能沒有多少人去維護;閉源的項目,具有商業性質,會以公司的性質去招募一些人來對這個閉源項目進行維護、發展;不要認為開源一定好,而閉源的不一定好……其實開源和閉源各有各的好處;

四、STL的六大組件

STL的核心是數據結構與算法,但其中又分為了6大組件

其中空間配置器就是內存池;

內存池是給容器使用的;因容器可能會高頻地申請釋放內存,不建立內存池便會在堆上向操作系統申請空間,而不停地打斷操作系統會有嚴重的效率損失,故而STL給他自己所有的容器統一建立了一個內存池以供其專用以提高這些數據結構申請、釋放內存的效率;需要注意的是,部分算法若會高頻地申請、釋放內存,內存池也會給部分算法使用,eg.歸并排序;


總結

1、STL(standard template libaray 標準模板庫):是C++標準庫的重要組成部分,不僅是一個可復用的組件庫,而且是一個包羅數據結構與算法的軟件框架;

2、STL在C++的學習中非常重要,需要我們熟練掌握容器接口的使用……

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85261.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85261.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85261.shtml

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

相關文章

智慧康養護理:科技重塑老齡化社會的健康守護體系

在我國邁入深度老齡化社會的背景下,智慧康養護理作為融合科技與人文的創新模式,正成為提升老年人生活質量、減輕家庭照護壓力、促進健康老齡化的重要路徑。我們將從核心概念、關鍵技術、實際應用與未來趨勢四個維度,為您呈現智慧康養護理的全…

權威認證與質量保障:第三方檢測在科技成果鑒定測試中的核心作用

科技成果鑒定測試是衡量科研成果技術價值與應用潛力的關鍵環節,其核心目標在于通過科學驗證確保成果的可靠性、創新性和市場適配性。第三方檢測機構憑借其獨立性、專業性和權威性,成為科技成果鑒定測試的核心支撐主體。本文從測試流程、第三方檢測的價值…

Linux.docker.k8s基礎概念

1.Linux基本命令 cat 查看文件內容。 cd 進入目標目錄。 ll 查詢當前路勁下文件的詳細信息。 ls 查詢當前路勁下的文件。 touch 建立一個文件。 mkdir 建立一個文件夾。 rm 刪除文件或者目錄。 mv 移動目錄和重新命名文件。 unzip 解壓。 top 查看當前線程的信息。 find …

Python小白的蛻變之旅:從環境搭建到代碼規范(1/10)

摘要:全文圍繞 Python 編程展開,先是介紹如何搭建 Python 開發環境,推薦使用 Anaconda 和 VSCode,并詳細說明了二者的安裝及配置步驟,包括安裝 Anaconda、安裝 VSCode 并配置 Python 插件、選擇 Anaconda 的 Python 解…

linux 1.0.7

用戶和權限的含義與作用 linux中的用戶和文件 用戶的權限是非常重要的 而且有些程序需要使用管理員身份去執行 這些都是非常重要的 不可能讓所有的人擁有所有的權限 這樣的工具可以避免非法的手段來修改計算機中的數據 linux之所以安全還是權限管理做的很棒 每個登錄的用戶都有…

【第4章 圖像與視頻】4.6 結合剪輯區域來繪制圖像

文章目錄 前言示例 前言 本節將綜合運用圖像處理、離屏 canvas 以及剪輯區域等技術實現墨鏡效果。 示例 主線程代碼&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport&qu…

UV 包管理工具:替代 pip 的現代化解決方案

安裝 方法一&#xff1a;使用安裝腳本 # macOS 和 Linux curl -LsSf https://astral.sh/uv/install.sh | sh# Windows PowerShell powershell -c "irm https://astral.sh/uv/install.ps1 | iex" 方法二&#xff1a;使用包管理器 # macOS (Homebrew) brew install uv#…

Java注解規范與使用詳解

注解中的空值限制 在Java注解中,元素值不允許使用null引用。這是注解使用中的一項重要約束規則,違反該規則將導致編譯錯誤。需要注意的是,雖然禁止使用null值,但允許為String類型元素指定空字符串(“”),為數組類型元素指定空數組({})。 空值約束示例 以下兩種注解用法…

從零開始的數據結構教程(八)位運算與狀態壓縮

&#x1f3a9; 標題一&#xff1a;位運算基礎——魔術師的二進制手套 位運算是一種直接操作數字二進制位的運算方式&#xff0c;它高效且巧妙&#xff0c;就像魔術師戴上了二進制手套&#xff0c;能夠精準地操控每一個比特。理解位運算是深入學習狀態壓縮和其他底層優化技巧的…

GraalVM加持下的Quarkus極速啟動

1. 引言 1.1 Quarkus與云原生時代的挑戰 隨著云原生架構的普及,傳統Java應用在部署效率、資源消耗和冷啟動性能方面逐漸暴露出短板。Spring Boot等框架雖然功能強大,但在Serverless、邊緣計算等場景下表現乏力。 Quarkus 是 Red Hat 推出的一個專為云原生設計的 Java/Kotl…

vue3 el-input type=“textarea“ 字體樣式 及高度設置

在Vue 3中&#xff0c;如果你使用的是Element Plus庫中的<el-input>組件作為文本域&#xff08;type"textarea"&#xff09;&#xff0c;你可以通過幾種方式來設置字體樣式和高度。 1. 直接在<el-input>組件上使用style屬性 你可以直接在<el-input&…

Matlab中gcb、gcbh、gcs的區別

gcb&#xff1a;返回當前選中模塊的完整路徑名&#xff08;字符串&#xff09; gcbh&#xff1a;返回當前選中模塊的句柄&#xff08;數值標識符&#xff09; gcs&#xff1a;返回當前打開或選中的子系統或頂層模型路徑&#xff08;字符串&#xff09;

大語言模型的技術原理與應用前景:從Transformer到ChatGPT

目錄 摘要 1. 引言 2. Transformer架構核心原理 2.1 自注意力機制 2.2 位置編碼 2.3 前饋神經網絡 3. 從GPT到ChatGPT的演進 3.1 GPT系列模型架構 3.2 訓練流程優化 4. 應用場景與案例分析 4.1 代碼生成 4.2 文本摘要 4.3 問答系統 5. 挑戰與未來方向 5.1 當前技…

Flink Table API 編程入門實踐

Flink Table API 編程入門實踐 前言 Apache Flink 是目前大數據實時計算領域的明星產品&#xff0c;Flink Table API 則為開發者提供了聲明式、類似 SQL 的數據處理能力&#xff0c;兼具 SQL 的易用性與編程 API 的靈活性。本文將帶你快速了解 Flink Table API 的基本用法&am…

Android之ListView

1&#xff1a;簡單列表(ArrayAdapter) 1&#xff1a;運行的結果&#xff1a; 2&#xff1a;首先在MyListView里面創建一個按鈕&#xff0c;點擊的時候進行跳轉。 這里讓我吃驚的是&#xff0c;Button里面可以直接設置onClick .java里面的方法。 也即是點擊這個按鈕之后就會去…

Python(十四)

1.type函數和init_subclass_ init_subclass_ 2.元類 類就是用來創建對象的模版&#xff0c;類是由type創造而來的&#xff0c;元類就是創建類的模版&#xff0c;type可以用來創造類&#xff0c;因為type本身就是一個元類&#xff0c;使用元類來創造類&#xff0c;元類之間也有…

當前用戶的Git全局配置情況:git config --global --list

通過config命令可以查詢當前用戶的全局配置情況。這些配置項定義了 Git 在全局范圍內的行為&#xff0c;包括如何處理大文件、SSL 證書驗證以及提交時的用戶信息。 git config --global --list http.sslVerifyfalse 這個配置項禁用了 SSL 證書驗證。這在與自簽名證書的 Git 服…

負載均衡群集---Haproxy

目錄 一、HAproxy 一、概念 二、核心作用 三、主要功能特性 四、應用場景 五、優勢與特點 二、 案例分析 1. 案例概述 2. 案例前置知識點 &#xff08;1&#xff09;HTTP 請求 &#xff08;2&#xff09;負載均衡常用調度算法 &#xff08;3&#xff09;常見的 web …

html5視頻播放器和微信小程序如何實現視頻的自動播放功能

在HTML5中實現視頻自動播放需設置autoplay和muted屬性&#xff08;瀏覽器策略要求靜音才能自動播放&#xff09;&#xff0c;并可添加loop循環播放、playsinline同層播放等優化屬性。微信小程序通過<video>組件的autoplay屬性實現自動播放&#xff0c;同時支持全屏按鈕、…

OpenHarmony定制系統組合按鍵(一)

一、開發環境 系統版本&#xff1a;OpenHarmony 4.0.10.13 設備平臺&#xff1a;rk3568 SDK版本&#xff1a;fullSDK 4.0.10.13 DevEco Studio版本&#xff1a;4.1.0.400 二、需求背景 定制OpenHarmony 系統組合按鍵功能&#xff0c;例如仿Android Power VOL_Up組合鍵實現截…