天天看點

C++提高程式設計(二)—— STL初識

c++系列内容的學習目錄             →        \rightarrow           →​ ​​c++學習系列内容彙總​​。

​​1. stl的誕生​​

​​2. stl基本概念​​

​​3. stl六大元件​​

​​4. stl中的容器、算法、疊代器​​

​5. 容器算法疊代器初識​

​​5.1 vector存放内置資料類型​​

​​5.2 vector存放自定義資料類型​​

​​5.3 vector容器嵌套容器​​

​​6. 總結​​

1. stl的誕生

長久以來,軟體界一直希望建立一種可重複利用的東西;

c++的面向對象和泛型程式設計思想,目的就是複用性的提升;

大多情況下,資料結構和算法都未能有一套标準,導緻被迫從事大量重複工作;

為了建立資料結構和算法的一套标準,誕生了stl。

2. stl基本概念

stl(standard template library,标準模闆庫);

stl 從廣義上分為: 容器(container) 、算法(algorithm) 、疊代器(iterator);

容器和算法之間通過疊代器進行無縫連接配接;

stl幾乎所有的代碼都采用了模闆類或者模闆函數。

  c++ stl(标準模闆庫)是一套功能強大的c++模闆類,提供了通用的模闆類和函數,這些模闆類和函數可以實作多種流行和常用的算法和資料結構,如向量、連結清單、隊列、棧。

3. stl六大元件

  stl大體分為六大元件 :容器、算法、疊代器、仿函數、擴充卡(配接器)、空間配置器。

容器: 各種資料結構,如vector、list、deque、set、map等,用來存放資料。

算法: 各種常用的算法,如sort、find、copy、for_each等。

疊代器: 扮演了容器與算法之間的膠合劑。

仿函數: 行為類似函數,可作為算法的某種政策。

擴充卡: 一種用來修飾容器或者仿函數或疊代器接口的東西。

空間配置器: 負責空間的配置與管理。

4. stl中的容器、算法、疊代器

  c++ 标準模闆庫的核心包括以下三個元件:

<col>

元件

描述

容器(containers)

容器是用來管理某一類對象的集合。c++ 提供了各種不同類型的容器,比如 deque、list、vector、map 等。

 算法(algorithms)

算法作用于容器。它們提供了執行各種操作的方式,包括對容器内容執行初始化、排序、搜尋和轉換等操作。

 疊代器(iterators)

疊代器用于周遊對象集合的元素。這些集合可能是容器,也可能是容器的子集。

  這三個元件都帶有豐富的預定義函數,幫助我們通過簡單的方式處理複雜的任務。

容器: 置物之所也。

    stl容器就是将運用最廣泛的一些資料結構實作出來,常用的資料結構:數組、連結清單、樹、棧、隊列、集合、映射表等。這些容器分為序列式容器和關聯式容器兩種。

    序列式容器: 強調值的排序,序列式容器中的每個元素均有固定的位置。

    關聯式容器: 二叉樹結構,各元素之間沒有嚴格的實體上的順序關系。

算法: 問題之解法也。

    有限的步驟,解決邏輯或數學上的問題,這一門學科我們叫做算法(algorithms)。算法分為質變算法和非質變算法。

    質變算法: 是指運算過程中會更改區間内的元素的内容,例如拷貝、替換、删除等等。

    非質變算法: 是指運算過程中不會更改區間内的元素内容,例如查找、計數、周遊、尋找極值等等。

疊代器: 容器和算法之間的粘合劑。

     提供一種方法,使之能夠依序尋訪某個容器所含的各個元素,而又無需暴露該容器的内部表示方式。每個容器都有自己專屬的疊代器,疊代器的使用非常類似于指針,初學階段我們可以先了解疊代器為指針。

     疊代器種類如下所示。

 種類  

功能

支援運算

輸入疊代器

對資料的隻讀通路

隻讀,支援++、==、!=

輸出疊代器

對資料的隻寫通路

隻寫,支援++

前向疊代器

讀寫操作,并能向前推進疊代器

讀寫,支援++、= =、!=

雙向疊代器

讀寫操作,并能向前和向後操作

讀寫,支援++、–,

随機通路疊代器

讀寫操作,可以以跳躍的方式通路任意資料,功能最強的疊代器

讀寫,支援++、–、[n]、-n、&lt;、

  常用的容器中的疊代器種類為雙向疊代器和随機通路疊代器。

5. 容器算法疊代器初識

  stl中最常用的容器為vector,可以了解為數組,下面我們将學習如何向這個容器中插入資料、并周遊這個容器。

  容器: ​<code>​vector​</code>​

  算法: ​<code>​for_each​</code>​

  疊代器: ​<code>​vector​</code>​

  執行個體如下所示。

第一種周遊方式:

10

20

30

40

第二種周遊方式:

第三種周遊方式:

  起始疊代器​<code>​v.begin()​</code>​和結束疊代器​<code>​v.end()​</code>​的示意圖如下圖所示。

C++提高程式設計(二)—— STL初識

  學習目标: vector中存放自定義資料類型,并列印輸出。

vector存放自定義資料類型:

姓名:張三  年齡:18

姓名:李四  年齡:20

姓名:王五  年齡:22

姓名:趙六  年齡:24

姓名:趙四  年齡:26

vector存放自定義資料類型的指針:

  學習目标: 容器中嵌套容器,我們将所有資料進行周遊輸出。

1 2 3 4

6. 總結

C++提高程式設計(二)—— STL初識