C 標準模板庫( STL )複習與總結(上)

2021-09-27 02:25:32 字數 3710 閱讀 8200

c++ 中提供了標準模板庫,其中封裝了很多相當實用的容器,不需要我們費力的去實現它們的細節而直接呼叫函式來實現很多功能,十分方便,會為我們的考試節省很多時間。希望能給大家帶來幫助~

(參考自 演算法筆記 )

本文將介紹我們考試中常用的一些容器及用法:

vector 翻譯成向量,這理解成 「變長陣列」,其長度可以根據需要自動改變。

標頭檔案#include。除此之外還得在下面加上using namespace std ;

vectorname;
typename 可以是任何基本型別,例如:

vector<

int> a;

vector<

double

> a;

vector<

char

> a;

vector a;

//結構體型別

vectorint>

> a;

//也可以是 vector 型別,此時兩個『>』之間一定要有空格(防止被c++11之前的編譯器當作移位操作,導致編譯錯誤)

· vector 陣列的定義

vectorarrayname[size];
例如:vectorvi[100];這裡的每乙個 vi[i] 都是乙個容器。

注: 需要指出的是,在常用stl容器中,只有 vector 和 string 中才允許使用 vi.begin()+1 這種迭代器加上整數的寫法!**

vector<

int> vi;

set翻譯為集合,是乙個內部自動有序且不含重複元素的容器。

標頭檔案:#include。除此之外還得在下面加上using namespace std ;

set< typename > name;
它的定義寫法和vector基本一樣,其實大部分 stl 都是這樣定義的~在此就不再贅述 ~

set只能通過迭代器(iterator)訪問:

set< double > :: iterator it;然後通過 *it 來訪問 set 裡的元素。

set<

int> st;

4.set 容器的使用場合

set 最主要的功能就是自動去重並按公升序排序,因此碰到需要去重但是不方便直接開陣列的情況,就可以用 set 解決。

: set 中元素的值是唯一的,如果想用 set 處理不唯一的情況,可以使用multiset

如果想只去重不排序,可以用unorder_set

string 翻譯為字串,c++對字串常用的需求功能進行了封裝,使得操作更加的方便。

標頭檔案#include(注意 string 和 string.h 是不同的標頭檔案) 。除此之外還得在下面加上using namespace std ;

string str;

如果要賦值:string str = ''abcd'';

int

main()

return0;

}

輸出結果:

abcd
如果要讀入和輸出整個字串,則用 cin 和 cout

cin>>str;

cout《注:如果要用 printf 來輸出 string ,就得用 c_str() 將 string 型別轉換成字元陣列進行輸出:

printf("%s\n", str.c_str());

string str1 = ''abcd'' , str2 = ''xyz'' , str3;

str3 = str1 + str2;

cout《輸出結果:

abcdxyz

map 翻譯為對映。map可以將任何基本型別(包括stl容器)對映到任何基本型別(包括stl容器)。

標頭檔案#include。除此之外還得在下面加上using namespace std ;

mapmp;

typename1 是對映前的型別,typename2 是對映後的型別

mapmp;

find(key):返回鍵為 key 的對映的迭代器

erase():刪除元素,同前面幾種容器,多一種寫法:erase(key)

size(): 對映的對數

clean(): 清空所有元素

queue 翻譯為佇列。先進後出的容器。

標頭檔案#include。除此之外還得在下面加上using namespace std ;

queue< typename > name;

只能通過front()訪問隊首元素,通過back()訪問對位元素

queue< int > q;

......

printf("%d %d",q.front(),q.back());

push(x):元素x入隊

pop(): 首元素出隊

front():獲得隊首元素

back():獲得隊尾元素

注:使用使用front()pop()前,必須使用empty()判斷佇列是否為空

empty():檢測是否為空

size(): 返回元素個數

注:stl的容器中還有兩種容器和佇列有關,分別是雙端佇列(deque)和優先佇列(priority_queue),前者是首尾皆可插入刪除的佇列,後者是用堆實現的預設將當前佇列最大元素置於隊首的容器。

推薦閱讀

c++標準模板庫( stl )複習與總結(下)

C 標準模板庫STL

stl是標準c 庫的一部分。stl模板類為c 提供了完善的資料結構和演算法。stl的特點 型別引數化 即stl的 中可處理任意自定義型別的物件。泛型程式設計 generic programming 它以模板為基礎,弱化了 實體型別的差異,簡化了程式設計時問題抽象的模型,提供了更好的 封裝性和彈性。s...

C 標準模板庫STL

stl 標準模板庫 包括容器,演算法,迭代器 容器用來儲存資料,比如vector,list,堆疊等,string也算 一共有八個 演算法就是對容器進行操作,比如增刪改查資料 迭代器用來遍歷容器itreator 用指標的方式來遍歷容器的資料 注 平時使用的時候大部分時候我們都用上了,但是面試的時候不能...

c (標準模板庫STL)

stl是一種泛型程式設計 generic programming 容器主要有以下分類 例如 容器的成員函式begin 返回指向容器中第乙個元素的迭代器 end 返回指向容器中最後乙個元素後繼位置的迭代器。下面通過stl中提供的乙個泛型函式find 來說明迭代器與泛型演算法的關係 首先看下stl對於f...