STL之容器 迭代器及演算法知識總結

2021-07-13 15:45:58 字數 3275 閱讀 8808

stl的關鍵元件包括容器(container)、迭代器(iterator)及演算法(algorithm),本文就這3部分內容進行總結。

容器按照型別分為序列式容器和關聯式容器,其中序列式容器包括vector、deque、list等可序群集,關聯式容器包括set、multiset、map、multimap等。

vector實現採用動態陣列方式,可以直接訪問任意元素,支援在尾部插入和刪除元素且實現速度快,在陣列前端和內部插入和刪除元素效率較低,因為涉及到修改元素後面的所有元素位置發生改變,具體使用例項如下所示:

#include #include using namespace std;

int main()

for(int i=0;i<5;i++)

for(int i=0;i<10;i++)

for(list::iterator it=a.begin();it!=a.end();it++)

a.erase(a.begin(),a.end());

cout

b.insert(++b.begin(),17);

b.insert(--b.end(),16);

for(list::iterator it=b.begin();it!=b.end();it++)

cout<

此外,string和array雖然不是容器類,但是也可以視為stl容器來使用stl演算法。

關聯式容器依據特定的排序準則,自動為其元素排序,排序準則以函式形式實現,比較值或者鍵,預設情況下採用operator《來比較,通常採用二叉樹結構儲存,節點的左子樹小於該元素,右子樹大於該元素。關聯式容器不支援push_back、push_front、pop_front、pop_back等操作,因為其是已序序列,程式設計師不能自己給其設定位置,插入只需使用insert,刪除使用erase。set中每個元素儲存乙個變數,而map儲存乙個pair對組(2個變數),multi-字首主要用來說明元素是可以重複的。具體的使用例項如下所示:

以上的測試例項可以看出,copy容器時,需resize容器的大小,否則拷貝失敗,呼叫copy函式時,若第三個引數不直接選擇目標容器的迭代器指標,也可使用安插性迭代器,使用inserter時,即呼叫insert函式,所以還需給出插入位置迭代器指標,使用back_inserter時,即呼叫push_back,同理使用front_inserter時,即呼叫push_front。不過要注意,map、set等關聯性容器不支援push_back和push_front操作,所以只能使用inserter,vector不能使用push_front,所以。。

流迭代器包括istream_iterator和ostream_iterator兩種,具體使用例項如下所示:

注意,使用流迭代器時需要包含標頭檔案,這點與安插性迭代器不同,此外,unique_copy函式去除了相鄰的相同元素,因此一般搭配sort函式一起使用。

除了安插性迭代器和流迭代器,還有乙個逆向迭代器,主要是容器內預定義的rbegin和rend函式,注意rbegin和end-1相等,rend和begin-1相等。

下面介紹更易型演算法,remove函式的程式例項如下:

#include #include #include #include #include using namespace std;

int main(){

vectorcoll;

coll.push_back("nihao");

coll.push_back("hello");

coll.push_back("how are you");

vector::iterator end=remove(coll.begin(),coll.end(),"hello");

cout

cout

coll.erase(end,coll.end());

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

cout<

一天的時間,stl正式入門階段,加油。。。

STL 容器與迭代器

迭代器 迭代器是泛化的指標 但並不是指標 用法和指標類似,利用迭代器對容器中的元素序列的操作。格式舉例list itrerator it 迭代器本身是乙個物件,這個物件可以遍歷stl容器內部全部的物件,它能夠反覆地對stl容器內容進行訪問。迭代器所提供的基本操作如下所示 a.獲取當前被指向的元素,用...

STL容器演算法迭代器的設計理念

1 stl的容器通過類模板技術,實現資料型別和容器模型的分離。2 stl的迭代器技術實現了遍歷容器的統一方法 也為stl的演算法提供了統一性,把容器和演算法有效的粘合在一起 3 stl的函式物件實現了自定義資料型別的演算法運算。演算法和函式物件 4 演算法通過函式物件 謂詞 實現自定義資料型別和基礎...

stl 2 初始容器迭代器演算法

include std cout std endl 螢幕輸出需要的標頭檔案 include vector容器和vector迭代器需要的標頭檔案 include for each演算法需要的標頭檔案 宣告乙個for each演算法需要用到的 函式 void myprint int v int main...