日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++中的STL

發布時間:2024/4/11 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中的STL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++中的STL

文章目錄

  • C++中的STL
    • 一、什么是STL
    • 二、STL的六大組件

一、什么是STL

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

  • 2.STL的發展史

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

  • P. J. 版本
    由P. J. Plauger開發,繼承自HP版本,被Windows Visual C++采用,不能公開或修改,缺陷:可讀性比較低,
    符號命名比較怪異。

  • RW版本
    由Rouge Wage公司開發,繼承自HP版本,被C+ + Builder 采用,不能公開或修改,可讀性一般。

  • SGI版本
    由Silicon Graphics Computer Systems,Inc公司開發,繼承自HP版 本。被GCC(Linux)采用,可移植性好,可公開、修改甚至販賣,從命名風格和編程 風格上看,閱讀性非常高

二、STL的六大組件

  • 容器:
  • 用來存放數據的一種數據結構,本質上容器就是對數據結構的封裝,方便使用該數據結構來管理數據
  • STL中的容器,可以劃分為兩大類:序列式容器和關聯式容器
  • 算法
  • 算法:問題的求解步驟,以有限的步驟,解決數學或邏輯中的問題。
  • STL中的算法主要分為兩大類:與數據結構相關算法(容器中的成員函數)和通用算法(與數據結構不相干)。
  • STL中通用算法總共有70多個,主要包含:排序,查找,排列組合,數據移動,拷貝,刪除,比較組合,運算等
算法名稱算法功能
accumulate元素統計
binary_search二分查找
copy拷貝
copy_backward逆向拷貝
copy_n拷貝n個元素
count計數
count_if在特定條件下計數
equal判斷兩個區間相等與否
fill填充元素
fill_n填充元素n次
find循環查找
find_if循環查找符合特定條件元素
find_end查找某個子序列的最后一次出現點
find_first_of查找某個元素首次出現點
for_each對區間內的每隔一元素實行某種操作
is_heap判斷某區間是否為一個heap
is_sorted判斷某區間是否已排序
lexicographical_compare以字典順序進行比較
max獲取最大值
max_element最大值所在位置
merge合并兩個序列
min獲取最小值
min_element最小值所在位置
next_permutation獲取下一個排列組合
pre_permutation獲取前一個排列組合
partial_sort局部排序
partial_sum局部求和
partition分割
remove刪除某類元素
remove_copy刪除某類元素并將結果拷貝到另一個容器中
remove_if有條件的刪除某類元素
replace替換某類元素
replace_if有條件的替換
reverse反轉序列
sort排序(不穩定)
stable_partition分割并保持元素的相對次序
stable_sort分割并保持相等元素的相對位置(穩定排序算法)
unique取出重復性元素
make_heap創建堆
push_heap堆插入
pop_heap堆刪除
sort_heap堆排序
  • 迭代器
  • 迭代器是一種設計模式,讓用戶通過特定的接口訪問容器的數據,不需要了解容器內部的底層數據結構。
  • C++中迭代器本質:是一個指針,讓該指針按照具體的結構去操作容器中的數據。
  • 適配器
  • 適配器:又接著配接器,是一種設計模式,簡單的說:需要的東西就在眼前,但是由于接口不對而無法使用,需要對其接口進行轉化以方便使用。
  • 即:將一個類的接口轉換成用戶希望的另一個類的接口,使原本接口不兼容的類可以一起工作

STL中適配器總共有三種類型:

  • 容器適配器-stack和queue
  • 迭代器適配器-反向迭代器
  • 函數適配器
    函數適配器
  • 仿函數
  • 仿函數:一種具有函數特征的對象,調用者可以像函數一樣使用該對象 ,為了能夠“行為類似函數”,該對象所在類必須自定義函數調用運算符operator(),重載該運算符后,就可在仿函數對象的后面加上一對小括號,以此調用仿函數所定義的operator()操作,就其行為而言,“仿函數”一次更切貼。
  • 仿函數一般配合算法,作用就是:提高算法的靈活性
#include <vector> #include <algorithm> class Mul2 { public:void operator()(int& data){ data <<= 1;} };class Mod3 { public:bool operator()(int data){ return 0 == data % 3;} };int main() {// 給容器中每個元素乘2vector<int> v{1,2,3,4,5,6,7,8,9,0};for_each(v.begin(), v.end(), Mul2());for (auto e : v)cout << e << " ";cout << endl;// 刪除容器中3的倍數auto pos = remove_if(v.begin(), v.end(), Mod3());v.erase(pos, v.end());// 將容器中的元素打印出來// 注意:對于功能簡單的操作,可以使用C++11提供的lambda表達式來代替// lambda表達式實現簡單,其在底層與仿函數的原理相同,編譯器會將lambda表達式轉換為仿函數for_each(v.begin(), v.end(), [](int data){cout << data << " "; });cout << endl;return 0; }
  • 空間配置器
  • 空間配置器,顧名思義就是為各個容器高效的管理空間(空間的申請與回收)的,在默默地工作
  • 雖然在常規使用STL時,可能用不到它,但站在學習研究的角度,學習它的實現原理對我們有很大的幫助

總結

以上是生活随笔為你收集整理的C++中的STL的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。