C 標準模板庫(STL)

2021-09-26 03:47:07 字數 2580 閱讀 6587

vector可以理解為「變長陣列」,也即「長度根據需要而自動改變的陣列」。

1.vector的定義

vectorname和一維陣列一樣,這裡的typename可以是任何基本型別

注意:如果typename也是乙個stl容器,定義的時候要記得在》符號之間加上空格 如:(a)vectorname這裡很容易聯想到二維陣列的定義,即其中一維是乙個陣列的陣列。那麼vector陣列也是一樣,即arrayname中的每乙個元素都是乙個vector

(b)定義vector陣列的方法:vectorarrayname[arraysize]這種寫法與上一種不同的 是,這種寫法的一維長度已經固定為arraysize,另一維才是變長。

2.vector容器內元素的訪問

(1)通過下標訪問

這種方式與陣列的下標訪問方式一樣,不再贅述。

(2)通過迭代器訪問

迭代器(iterator)可以理解為一種類似指標的東西,使用方式如下:

vector::iterator it;

這樣就得到了迭代器it,並且可以通過*it來訪問vector裡的元素。

#include#includeusing namespace std;

int main( )

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

3.常用函式

(1)push_back

這個函式就是在vector後邊新增乙個元素x。

(2)pop_back()

這個函式就是刪除vector的尾元素。

(3)size()

這個函式用來獲得vector中元素的個數。

(4)clear()

用來清空vector中所有元素。

(5)insert

insert(it,x)用來像任意的迭代器it處插入乙個元素x。

如:vi.insert(vi.begin()+2,-1);//將-1插入vi[2]的位置。

(6)erase()

erase()有兩種用法:刪除單個元素,刪除乙個區間內的所有元素。

vi.erase(vi.begin()+3);//刪除vi[3]

vi.erase(vi.begin()+1,vi.begin()+4);//刪除vi[1],vi[2],vi[3]

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

1.set容器內元素的訪問

set只能通過迭代器訪問

由於除開vector和string之外的stl容器都不支援(it+i)的訪問方式,因此只能按如下方式列舉*:

#include#includeusing namespace std;

int main( )

執行結果不難發現,set內的元素自動遞增排序,且自動去除了重複元素

2.set常用函式

(1)insert()

insert(x)可將x插入set容器中,並且自動遞增排序和去重。

(2)find()

find(value)返回set中對應值為value的迭代器

(3)erase() size() clear()同上

即用來儲存字串

用法都和上邊的類似,不再贅述

下面介紹相關的函式例項

1.operator+=

這是string 的加法,可以將兩個string直接拼接起來

#include#includeusing namespace std;

int main( )

{ string str1="abc",str2="xyz",str3;

str3=str1+str2;

str1+=str2;

cout<2.compare operator

兩個string直接用==,!=,<,>等比較,比較規則是字典序

3.length(),size()

返回string的長度

4.insert()

在string中insert()的用法有很多

(1)insert(pos,string),在pos號位置插入字串string

(2)insert(it,it2,it3)

it為原字串的欲插入位置,it2,it3為待插入字串的首位迭代器,用來表示串[it2,it3)將被插入在it的位置上。

(3)substr()

substr(pos,len)返回從pos號位開始,長度為len的子串

(4)replace()

str.replace(pos,len,str2)把str從pos號位開始,長度為len的字串替換為str2。

str.replace(it1,it2,str2)把str的迭代器[it1,it2)範圍內的字串替換為str2。

map即理解為對映,比如在定義陣列時,如int aeeay[100]其實時定義了乙個從int 到int 的對映,所以我們就可以用map建立任何基本型別對映到任何基本型別。

ps:以上摘自《演算法筆記》

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...