C++之STL簡介

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 前言
  • 一、STL是什么
  • 二、STL的發展歷史
  • 三、STL的組成部分
    • 3.1 容器(Containers)
    • 3.2 迭代器(Iterators)
    • 3.3 算法(Algorithms)
    • 3.4 仿函數(Functors)和函數對象(Function Objects)
    • 3.5 適配器(Adapters)
  • 總結


前言

本文主要介紹一下C++中STL的相關概念


一、STL是什么

STL 的全稱是 Standard Template Library(標準模板庫),它是 C++ 標準庫中的一部分,提供了許多通用的模板類和函數,用于實現常用的數據結構和算法。STL 是 C++ 中廣泛使用的一個庫,被認為是 C++ 的核心之一。

二、STL的發展歷史

C++標準模板庫(STL)的發展歷史可以追溯到20世紀70年代,經過幾代學者和工程師的努力,逐步演變成今天的模樣。以下是STL發展的主要歷程:

1. 早期背景 1970年代 - 1980年代

泛型編程的萌芽:泛型編程的思想可以追溯到1970年代末和1980年代初期。當時的計算機科學家們開始研究如何編寫能夠處理多種數據類型的通用算法和數據結構。

Ada語言的影響:Ada語言在1983年推出,它是早期嘗試泛型編程的語言之一,對C++和STL的發展有一定影響。

2. STL的形成 1990年代初期

Alexander Stepanov的研究:Alexander Stepanov是泛型編程的先驅之一,他在通用算法和數據結構方面做了大量研究。1987年,他在AT&T貝爾實驗室開始研究如何將這些概念應用于C++。

與Meng Lee的合作:1992年,Stepanov和Meng Lee在惠普公司(HP Labs)合作,致力于將泛型編程的思想轉化為一個實際的庫,這就是STL的雛形。

3. 標準化和推廣 1993年 - 1994年

STL的首次發布:1994年,Stepanov和Lee正式發布了STL,這一版本迅速引起了C++社區的關注。

納入標準:同年,STL被提議作為C++標準庫的一部分。STL的設計和實現得到了C++標準委員會的認可,并決定將其納入C++標準。

1998年

C++98標準:STL作為C++98標準的一部分正式發布,成為C++標準庫的重要組成部分。這一版本奠定了STL在C++編程中的基礎地位。

4. 持續改進和擴展 2000年代

Boost庫的影響:Boost庫是一個開源的C++庫集合,其中包含了許多對STL的擴展和改進,例如智能指針、正則表達式等。這些庫為C++標準庫的進一步發展提供了很多靈感和實現。

C++11標準:2011年,C++11標準發布,包含了對STL的大量改進和擴展,如新的容器(unordered_map, unordered_set)、新的算法(move, forward)、智能指針(shared_ptr, unique_ptr)和并行算法等。

2017年 - 2020年

C++17標準:2017年,C++17標準發布,進一步增強了STL的功能,引入了文件系統庫()、并行STL算法、std::optional、std::variant等新特性。

C++20標準:2020年,C++20標準發布,包含了協程(coroutines)、范圍(ranges)庫、概念(concepts)等,進一步擴展和增強了STL。

三、STL的組成部分

STL(標準模板庫)是C++的一個重要組件,它是由一組通用的模板類和函數組成的,并且提供了一些常用的數據結構和算法,如動態數組(vector)、雙端隊列(deque)、鏈表(list)、集合(set)、映射(map)、排序、查找等。STL的設計思想是將數據結構和算法進行分離,使得它們可以獨立使用和擴展,提高了代碼的復用性和可讀性。STL主要包括以下幾個組件:

3.1 容器(Containers)

STL提供了多種容器,如動態數組(vector)、雙端隊列(deque)、列表(list)、集合(set)、映射(map)等。這些容器提供了不同的存儲和訪問數據的機制。

  1. vector:可以動態調整大小的數組,支持快速的隨機訪問和迭代器訪問,并且支持在尾部添加或刪除元素。

  2. deque:雙端隊列,支持快速的隨機訪問和迭代器訪問,并且支持在頭部和尾部添加或刪除元素。

  3. list:雙向鏈表,只支持迭代器訪問,并且支持在任意位置添加或刪除元素。

  4. set:有序集合,其中每個元素都是唯一的,支持快速的查找和插入操作。

  5. map:有序映射,其中每個元素都有一個唯一的鍵值對,支持快速的查找和插入操作。

  6. unordered_set:無序集合,其中每個元素都是唯一的,支持快速的查找和插入操作,但元素的順序是未定義的。

  7. unordered_map:無序映射,其中每個元素都有一個唯一的鍵值對,支持快速的查找和插入操作,但元素的順序是未定義的。

3.2 迭代器(Iterators)

迭代器是STL中的一個核心概念,它提供了一種訪問容器中元素的方法。迭代器類似于指針,但比指針更安全、更靈活。STL中的算法通常通過迭代器來訪問和操作容器中的元素。

3.3 算法(Algorithms)

STL提供了大量的算法,用于對容器中的元素進行各種操作,如排序、搜索、計數、拷貝等。這些算法與容器無關,因此可以在不同的容器上使用相同的算法。

3.4 仿函數(Functors)和函數對象(Function Objects)

仿函數和函數對象是C++中一種特殊的類,它們重載了函數調用操作符(),因此可以像函數一樣被調用。在STL中,仿函數和函數對象經常用于算法中,以提供自定義的比較、哈希等操作。

3.5 適配器(Adapters)

適配器是一種設計模式,用于將一個類的接口轉換為客戶端所期望的另一種接口。在STL中,適配器通常用于修改容器的行為或提供額外的功能。

總結

STL的設計理念是泛型編程,通過模板機制,使得相同的算法和數據結構可以應用于不同的數據類型,提供了極大的靈活性和重用性。STL是C++標準庫的重要組成部分,極大地提高了C++編程的效率和代碼的可維護性。

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

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

相關文章

【啟明智顯分享】ESP32-S3 4.3寸觸摸串口屏HMI應用方案:WIFI/藍牙無線通信助力烘干設備實現遠程遙控

技術不斷進步,人們對烘干設備的美觀度、功能多樣性提出更高要求,傳統的數碼管顯示、按鍵式控制已經無法滿足客戶的需求。用智能屏替代傳統的數碼管可以很好的解決這個問題,為用戶帶來更好的人機交互體驗。 基于此,啟明智顯提出將樂…

solidity實戰練習2--ERC20實現

//SPDX-License-Identifier:MTT pragma solidity ^0.8.24;interface erc20{function name()external view returns (string memory);//查看代幣的名稱function symbol() external view returns(string memory);//查看代幣簡稱function totalSupply()external view returns(uint…

低代碼:架起產教融合的“立交橋”

隨著信息技術的飛速發展,傳統的軟件開發模式正面臨著前所未有的挑戰。為了應對這一挑戰,低代碼平臺應運而生,其通過簡化開發流程、提高開發效率,成為了推動產業與教育深度融合的重要力量。本文將探討低代碼平臺如何架起產教融合的…

C++基礎(十八):繼承(重點)

各位看官,大家好!今天我們將探討C中的三大特性之一:繼承。繼承是一種面向對象編程的重要概念,它允許我們通過創建新的類,從而復用和擴展現有類的功能。通過繼承,我們不僅能夠提高代碼的可重用性和可維護性&…

算法刷題筆記 KMP字符串(C++實現,并給出了求next數組的獨家簡單理解方式)

文章目錄 題目描述基本思路實現代碼 題目描述 給定一個字符串S,以及一個模式串P,所有字符串中只包含大小寫英文字母以及阿拉伯數字。模式串P在字符串S中多次作為子串出現。求出模式串P在字符串S中所有出現的位置的起始下標。 輸入格式 第一行輸入整數…

docker拉取鏡像,報錯error pulling image configuration: download failed after attempts=6: dial tcp 157.240.1

error pulling image configuration: download failed after attempts6: dial tcp 157.240.10.32:443: i/o timeout docker compose pull docker pull langgenius/dify-web:0.6.13 重啟docker sudo systemctl restart dockerhttps://stackoverflow.com/questions/72353203/do…

9.5 柵格圖層符號化多波段彩色渲染

文章目錄 前言多波段彩色渲染QGis設置為多波段彩色二次開發代碼實現多波段彩色 總結 前言 介紹柵格圖層數據渲染之多波段彩色渲染說明:文章中的示例代碼均來自開源項目qgis_cpp_api_apps 多波段彩色渲染 以“3420C_2010_327_RGB_LATLNG.tif”數據為例&#xff0c…

代碼隨想錄打卡第二十一天

代碼隨想錄–二叉樹部分 day 21 二叉樹第八天 文章目錄 代碼隨想錄--二叉樹部分一、力扣669--修建二叉搜索樹二、力扣108--將有序數組轉換為二叉搜索樹三、力扣538--把二叉搜索樹轉換為累加樹 一、力扣669–修建二叉搜索樹 代碼隨想錄題目鏈接:代碼隨想錄 給你二叉…

常見條件控制算法流程圖

內容講解:流程控制[if…else…(if…elif…else…),while,for] 常見條件控制算法流程圖高清圖

新手教學系列——高效管理MongoDB數據:批量插入與更新的實戰技巧

前言 在日常開發中,MongoDB作為一種靈活高效的NoSQL數據庫,深受開發者喜愛。然而,如何高效地進行數據的批量插入和更新,卻常常讓人頭疼。今天,我們將一起探討如何使用MongoDB的bulk_write方法,簡化我們的數據管理流程,讓代碼更加簡潔高效。 常規做法:find、insertone…

Unity 之 抖音小游戲集成排行榜功能詳解

Unity 之 抖音小游戲集成排行榜功能詳解 一,前言1.1 為游戲設計利于傳播的元素?2.2 多人競技、社交傳播?二,集成說明2.1 功能介紹2.2 完整代碼2.3 效果展示三,發現的問題和迭代計劃一,前言 對于 Unity 開發者而言,在開發抖音小游戲時集成排行榜功能是提升游戲社交性和玩…

Java實戰中處理高并發的策略

引言 隨著互聯網的快速發展,高并發成為了許多應用必須面對的挑戰。Java作為一門廣泛應用于企業級開發的語言,提供了豐富的工具和技術來應對高并發問題。本文將詳細探討Java中處理高并發的幾種常見策略和技術。 1. 并發編程基礎 1.1 線程與線程池 Jav…

【TVM 教程】使用 TVM 部署框架預量化模型

本文介紹如何將深度學習框架量化的模型加載到 TVM。預量化模型的導入是 TVM 中支持的量化之一。有關 TVM 中量化的更多信息,參閱 此處。 這里演示了如何加載和運行由 PyTorch、MXNet 和 TFLite 量化的模型。加載后,可以在任何 TVM 支持的硬件上運行編譯…

【Linux】常見指令收官權限理解

tar指令 上一篇博客已經介紹了zip/unzip指令,接下來我們來看一下另一個關于壓縮和解壓的指令:tar指令tar指令:打包/解包,不打開它,直接看內容 關于tar的指令有太多了: tar [-cxtzjvf] 文件與目錄 ...…

C++運行時類型識別

目錄 C運行時類型識別A.What(什么是運行時類型識別RTTI)B.Why(為什么需要RTTI)C.dynamic_cast運算符Why(dynamic_cast運算符的作用)How(如何使用dynamic_cast運算符) D.typeid運算符…

【Scrapy】 Scrapy 爬蟲框架

準我快樂地重飾演某段美麗故事主人 飾演你舊年共尋夢的戀人 再去做沒流著情淚的伊人 假裝再有從前演過的戲份 重飾演某段美麗故事主人 飾演你舊年共尋夢的戀人 你縱是未明白仍夜深一人 穿起你那無言毛衣當跟你接近 🎵 陳慧嫻《傻女》 Scrapy 是…

各地戶外分散視頻監控點位,如何實現遠程集中實時監看?

公司業務涉及視頻監控項目承包搭建,此前某個項目需求是為某林業公司提供視頻監控解決方案,需要實現各地視頻攝像頭的集中實時監看,以防止國家儲備林的盜砍、盜伐行為。 公司原計劃采用運營商專線連接各個視頻監控點位,實現遠程視…

跟著李沐學AI:線性回歸

引入 買房出價需要對房價進行預測。 假設1:影響房價的關鍵因素是臥室個數、衛生間個數和居住面積,記為x1、x2、x3。 假設2:成交價是關鍵因素的加權和 。權重和偏差的實際值在后面決定。 拓展至一般線性模型: 給定n維輸入&…

MySQL 9.0 正式發行Innovation創新版已支持向量

從 MySQL 8.1 開始,官方啟用了新的版本模型:MySQL 創新版 (Innovation) 和長期支持版 (LTS)。 根據介紹,兩者的質量都已達到可用于生產環境級別。區別在于: 如果希望嘗試最新的功能和改進,并喜歡與最新技術保持同步&am…

怎樣在 C 語言中實現棧?

🍅關注博主🎗? 帶你暢游技術世界,不錯過每一次成長機會! 📙C 語言百萬年薪修煉課程 通俗易懂,深入淺出,匠心打磨,死磕細節,6年迭代,看過的人都說好。 文章目…