C 學習筆記36 標準模板庫STL

2021-10-02 16:28:05 字數 2700 閱讀 5564

泛型程式設計

1 c++語言的核心優勢之一就是便於軟體重用

2 c++中有兩個方面體現重用:

1 物件導向的思想:繼承和多型, 標準類庫

2 泛型程式設計的思想:模板機制,以及標準模板庫stl

3 簡單的說就是使用模板的程式設計法。

4 將一些常用的資料結構(比如鍊錶, 陣列, 二叉樹 寫成類模板)和演算法(比如排序,查詢 寫成函式模板)寫成模板,以後則不論資料結構裡放的是什麼物件,演算法針對什麼樣的物件,則都不必重新實現資料結構,重新編寫演算法。

5 標準模板庫就是一些常用資料結構和演算法的模板的集合

6 有了stl,不必再寫大多的標準資料結構和演算法,並且可獲得非常高的效能

stl中的基本的概念

容器:可容納各種資料型別的通用資料結構,是類模板

迭代器:可用於依次訪問容器中元素,類似於指標

演算法:用來操作容器中的元素的函式模板

-- sort()來對乙個vector中的資料進行排序

-- find()來搜尋乙個list中的物件

演算法本身與他們操作的資料的型別無關,因此他們可以在從簡單陣列到高度複雜容器的任何資料結構上使用。

eg:int array[100];

該陣列就是容器,而int*型別的指標變數就可以作為迭代器,sort演算法可以作用於該容器上,對其進行排序:

sort(array, array + 70); // 將前70個元素排序 其中array為迭代器 array+70也為迭代器

容器概述

1 可以用於存放各種型別的資料(基本型別的變數,物件等)的資料結構,都是類模板,分為三種:

1)順序容器

vector:動態一維陣列, deque:雙向佇列, list:雙向鍊錶

2)關聯容器

set, multiset, map, multimap

3)容器介面卡

stack:棧, queue:佇列, priority_queue:優先順序佇列

2 物件被插入容器中時,被插入的是物件的乙個複製品。

許多演算法,比如排序,查詢,要求對容器中的元素進行比較,有的容器本身就是排序的,所以,放入容器的物件所屬的類,往往還應該過載 == 和 < 運算子。

順序容器簡介

容器並非排序的,元素的插入位置同元素的值無關。

有vector, deque, list三種

-- vector 標頭檔案動態陣列。元素在記憶體連續存放。隨機訪問任何元素都能在常數時間完成。在尾端增刪元素具有較佳的效能(大部分情況下是常數時間)

vector在實現的時候儲存空間會預先多分配一些,例如只有10個元素的情況下,vector也會事先分配32個元素的空間,好處在於新增第11個元素的時候,不需要重新分配儲存空間

vector在頭部或者中間插入、刪除乙個元素,時間複雜度為o(n);

-- deque 標頭檔案雙向佇列。元素在記憶體連續存放。隨機訪問任何元素都能在常數時間完成(但次於vector)。在兩端增刪元素具有較佳的效能(大部分請情況下為常數時間)。

記憶體中連續九個單元:

head tail

空格 空格 a0 a1 a2 a3 a4 空格 空格

deque是雙向佇列,會有乙個隊頭指標head和隊尾指標tail

-- list 標頭檔案雙向鍊錶。元素在記憶體不連續存放。在任何位置增刪元素都能在常數時間完成。不支援隨機訪問

關聯容器簡介

-- 元素是排序的

-- 插入任何元素,都按相應的排序規則來確定其位置

-- 在查詢時具有非常好的效能

-- 通常以平衡二叉樹方式實現,插入和檢索的時間都是o(log(n))

-- set/multiset 標頭檔案 set即集合。set中不允許相同元素,multiset中允許有形同的元素。

-- map/multimap 標頭檔案 map與set不同在於map中存放的元素有且僅有兩個成員變數,乙個名為first,另乙個名為second,map根據first值對元素進行從小到大排序,並可快速低根據first來檢索元素。

map同multimap的不同在於是否允許相同的first值的元素。

容器介面卡簡介

-- stack: 標頭檔案 棧。是項的有限序列,並滿足序列中被刪除、檢索和修改的項只能是最近插入序列的項(棧頂的項)。後進先出

-- queue: 標頭檔案 佇列。插入只可以在尾部進行,刪除、檢索和修改之允許從頭部進行。先進先出

-- priority_queue: 標頭檔案 優先順序佇列。最高優先順序元素總是第乙個出列

順序容器和關聯容器中都有的成員函式

begin 返回指向容器中第乙個元素的迭代器

end 返回指向容器中最後乙個元素後面位置的迭代器

rbegin 返回指向容器中最後乙個元素的迭代器

rend 返回指向容器中第乙個元素後面的位置的迭代器

erase 從容器中刪除乙個或幾個元素

clear 從容器中刪除所有元素

順序容器的常用成員函式

front: 返回容器中第乙個元素的引用

back: 返回容器中最後乙個元素的引用

push_back: 在容器末尾新增新元素

pop_back: 刪除容器末尾的元素

erase: 刪除迭代器指向的元素(可能會使迭代器失效),或刪除乙個區間,返回被刪除元素後面的那個元素的迭代器

C 學習筆記 STL(標準模板庫)

1 首先 需要學習c 模板的概念 2 c stl 標準模板庫 是一套功能強大的 c 模板類,提供了通用的模板類和函式,這些模板類和函式可以實現多種流行和常用的演算法和資料結構,如向量 鍊錶 佇列 棧。3 c 標準模板庫的核心包括以下三個元件 元件描述 容器 containers 容器是用來管理某一類...

c 標準模板庫STL學習

初始化vector物件的方法 vector v1 vector儲存型別為t的物件。預設建構函式v1為空 vector v2 v1 v2是v1的乙個副本 vector v3 n,i v3包含n個值為i的元素 vector v4 n v4包含有值初始化元素的n個副本 vector常用函式 empty 判...

學習標準模板庫STL

標準模板庫 stl,即standard template library 是乙個c 軟體庫。stl常見頭件包括algorithm,functional iterator vector list deque queue stack等。在學習過程中與其他常見庫對比,如mfc,wxwidgets,itk,...