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