C++ 標準模板類詳解
1 標準模板庫
STL提供瞭表示容器、迭代器、函數對象和算法的模板。
- 容器:類似數組存儲若幹值,切實同質的;
- 迭代器:遍歷容器的對象,類似遍歷數組的指針,廣義指針;
- 算法:完成特定的任務;
- 函數對象:類對象或函數指針。
模板類 vector
erase() 刪除矢量中給定區間元素。接受兩個迭代器參數(該參數定義瞭要刪除的區間),迭代器1指向區間起始處,迭代器2指向區間終止處的後一個位置。
// delete first and second elements data.erase(data.begin(), data.begin() + 2);
insert() 與erase() 功能相反。接受三個迭代器參數。param1 指定新元素插入位置,param2 和 param3 定義別插入的區間(通常是其他對象)。
// insert [old.begin + 1, old.end) in the front of data data.insert(data.begin(), old.begin() + 1, old.end()); // 此時,超尾元素顯得十分方便 // 在末尾緊挨著插入元素 data.insert(data.end(), old.begin() + 1, old.end());
for_each() 接受三個參數。param1 和 param2 是定義容器中區間的迭代器,param3 指向函數的指針(函數對象)。將被指向的函數(param3)用於區間 [param1, param2) 的各個元素。但是被指向的函數 param3 不可以修改區間的值。
// 代替for循環 for(auto iter = data.begin(); iter != data.end(); iter++) { showData(*iter); } // replace for with for_each // 註意此處的函數showData不能修改data的值。 for_each(data.begin(), data.end(), showData);
sort() 排序函數。
1)接受2個區間的迭代器參數,對元素利用<運算符進行操作。
2)接受3個參數,前兩個指定區間的迭代器,最後一個指向要是有的函數指針(對象)。這裡的函數類似仿函數特性,但是形式不同於仿函數。
區分全排列(total ordering)和完整弱排序(strict weak ordering)。
// usage 1 sort(data.begin(), data.end()); // usage 2 bool compare(const structData& a, const structData& b) { if(a.index == b.index) { return a.data < b.data; } return a.index < b.index; } // sort with index from little to big, if index is equal, sort with data. sort(data.begin(), data.end(), compare);
基於范圍 for 循環。不同於 for_each,基於范圍的for循環可以修改容器的內容。
2.泛型編程
泛型編程旨在編寫獨立於數據結構的代碼(即編寫一套可以適用於所有數據結構的函數代碼)。模板可以按照泛型定義函數或者類。
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- C++STL教程之vector模板的使用
- 帶你瞭解C++中vector的用法
- 總結瞭24個C++的大坑,你能躲過幾個
- C++中vector操作方式詳解(多種方式)
- C++ primer超詳細講解順序容器