C 提高程式設計(2) STL初識

2021-10-06 13:51:18 字數 2585 閱讀 9025

stl大體分為六大元件,分別是:容器、演算法、迭代器、仿函式、介面卡(配接器)、空間配置器

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

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

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

仿函式:行為類似函式,可作為演算法的某種策略。

介面卡:一種用來修飾容器或者仿函式或迭代器介面的東西。

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

**容器:**置物之所也

stl容器就是將運用最廣泛的一些資料結構實現出來

常用的資料結構:陣列, 鍊錶,樹, 棧, 佇列, 集合, 對映表 等

這些容器分為序列式容器關聯式容器兩種:

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

關聯式容器:二叉樹結構,各元素之間沒有嚴格的物理上的順序關係

**演算法:**問題之解法也

有限的步驟,解決邏輯或數學上的問題,這一門學科我們叫做演算法(algorithms)

演算法分為:質變演算法非質變演算法

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

非質變演算法:是指運算過程中不會更改區間內的元素內容,例如查詢、計數、遍歷、尋找極值等等

**迭代器:**容器和演算法之間粘合劑

提供一種方法,使之能夠依序尋訪某個容器所含的各個元素,而又無需暴露該容器的內部表示方式。

每個容器都有自己專屬的迭代器

迭代器使用非常類似於指標,初學階段我們可以先理解迭代器為指標

迭代器種類:

種類功能

支援運算

輸入迭代器

對資料的唯讀訪問

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

輸出迭代器

對資料的只寫訪問

只寫,支援++

前向迭代器

讀寫操作,並能向前推進迭代器

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

雙向迭代器

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

讀寫,支援++、–,

隨機訪問迭代器

讀寫操作,可以以跳躍的方式訪問任意資料,功能最強的迭代器

讀寫,支援++、–、[n]、-n、<、<=、>、>=

常用的容器中迭代器種類為雙向迭代器,和隨機訪問迭代器

了解stl中容器、演算法、迭代器概念之後,我們利用**感受stl的魅力

stl中最常用的容器為vector,可以理解為陣列,下面我們將學習如何向這個容器中插入資料、並遍歷這個容器

2.5.1 vector存放內建資料型別

容器:vector

演算法:for_each

迭代器:vector::iterator

示例:

#include #include void myprint(int val)

void test01()

//第二種遍歷方式:

for (vector::iterator it = v.begin(); it != v.end(); it++)

cout << endl;

//第三種遍歷方式:

//使用stl提供標準遍歷演算法 標頭檔案 algorithm

for_each(v.begin(), v.end(), myprint);

}int main()

2.5.2 vector存放自定義資料型別

學習目標:vector中存放自定義資料型別,並列印輸出

示例:

#include #include //自定義資料型別

class person

public:

string mname;

int mage;

};//存放物件

void test01()

}//放物件指標

void test02()

}int main()

2.5.3 vector容器巢狀容器

學習目標:容器中巢狀容器,我們將所有資料進行遍歷輸出

示例:

#include //容器巢狀容器

void test01()

//將容器元素插入到vector v中

v.push_back(v1);

v.push_back(v2);

v.push_back(v3);

v.push_back(v4);

for (vector>::iterator it = v.begin(); it != v.end(); it++)

cout << endl; }}

int main()

C 提高程式設計 2 STL初識

2.1 stl的誕生 長久以來,軟體界一直希望建立一種可重複利用的東西 c 的物件導向和泛型程式設計思想,目的就是提公升 的復用性。大多數情況下,資料結構和演算法都未能有一套標準,導致被迫從事大量重複的工作,為建立一套資料結構和演算法的標準,誕生了stl 2.2 stl基本概念 stl standa...

c 主項練習錯題分析 2 STL容器

下面哪幾種是 stl 容器型別 vector setmultivector multiset array 正確答案 a b d e c 11 stl中的容器 一 順序容器 vector 可變大小陣列 deque 雙端佇列 list 雙向鍊錶 forward list 單向鍊錶 array 固定大小陣...

演算法筆記學習記錄(2) STL

c 標準模板庫 stl 1 vector 變長陣列 定義 vector name vectorname 訪問 1.像普通陣列一樣通過下標訪問 2.通過迭代器訪問,迭代器iterator可以理解為一種類似指標的東西,定義 vector iterator it,可以通過 it來訪問vector裡的元素。...