STL學習體會1

2021-04-20 07:48:47 字數 1705 閱讀 5140

最近在開始學習stl,記錄一些學習的心得和體會,如有不足,期待大家批評指正!

stl(standard template library),即標準模板庫,是乙個具有工業強度的,高效的c++程式庫。該庫包含了諸多在電腦科學領域裡所常用的基本資料結構和基本演算法。為廣大c++程式設計師們提供了乙個可擴充套件的應用框架,高度體現了軟體的可復用性。這種現象有些類似於microsoft visual c++中的mfc(microsoft foundation class library),或者是borland c++ builder中的vcl(visual component library),對於此二者,大家一定不會陌生吧。

我們可以這樣理解:stl的思想其實是將資料和操作分離.它包括:容器(container),迭代器(iterator),演算法(algorithmn),它體現了泛型化程式設計思想.

廢話不多說了,讓我們來看看3個程式範例:

第一版:史前時代--轉木取火

#include

#include

int compare(const void *arg1, const void *arg2);

void main(void)

// 比較兩個數的大小,

// 如果*(int *)arg1比*(int *)arg2小,則返回-1

// 如果*(int *)arg1比*(int *)arg2大,則返回1

// 如果*(int *)arg1等於*(int *)arg2,則返回0

int compare(const void *arg1, const void *arg2)

這是乙個和stl沒有任何關係的傳統c++風格程式.

第二版:工業時代--元件化大生產

#include

#include

#include

using namespace std;

void main(void)

這個程式的主要部分改用了stl的部件,看起來要比第乙個程式簡潔一點,你已經找不到那個討厭的compare函式了

第三版:唯美主義的傑作

#include

#include

#include

#include

using namespace std;

void main(void)

在這個程式裡幾乎每行**都是和stl有關的(除了main和那對花括號,當然還有注釋),並且它包含了stl中幾乎所有的各大部件(容器 container,迭代器iterator, 演算法algorithm, 介面卡adaptor),唯一的遺憾是少了函式物件(functor)的身影。

可能大家看完這3個列子,感覺一頭霧水.

下面就來討論下stl中的容器(container)

容器其實就是具有一些特定特徵的資料集合.

它又分為:

vector,deque,list,strings等

vector可以看成動態陣列(dynamic arrary),其特點是可以隨機訪問元素通過陣列下標。它的缺點是往陣列頭和中間插入元素比較費時,效率不高.

deque相當於乙個2端均可以進行元素插入的佇列,其往頭或尾插入元素都比較高效.

list是乙個鍊錶,由於資料為隨機存放,取的時候必須遍歷所取元素之前的所有節點,取資料元素時,效率不及vector和deque,但對其進行中間插入

元素的時候效率卻是最高的,因為不用乙個個的將資料往後依次移位,只需將指標的指向進行相應的變更就行.

OpenCV學習體會(1)

現在自學opencv,當執行網上提供的以下原始碼時 縮放影象檔案 by morewindows include using namespace std 隱藏控制台視窗 pragma comment linker,subsystem windows entry maincrtstartup int m...

鄭碼學習體會(1)

鄭碼是乙個非常優秀的漢字形碼,在二十多年前,能夠產生鄭碼這樣先進的漢字輸入思想,是十分卓越的,尤其是發明人鄭老先生同時還啟迪了五筆輸入法的發明。鄭碼使用26個字母對漢字編碼。概而言之,鄭碼的字母具有多種功能。1 字母代表一種抽象的漢字字形特徵,用於標識副根 2 字母代表主根 3 字母d用來標識第二基...

動態規劃學習體會(1)

最近利用工作中的空閒時間,學完了 演算法導論 中的動態規劃,也算是填補了自己對於複雜演算法方面知識的空缺。以下是我對這部分內容的總結。動態規劃主要是用來解決求最優解問題的一種方法,這類問題如果使用常規的方法處理可能會花費極為漫長的時間。而使用動態規劃來進行解決的話往往會花費更少的代價。當然這類問題必...