C++ 標(biāo)準(zhǔn)模板類詳解
1 標(biāo)準(zhǔn)模板庫(kù)
STL提供了表示容器、迭代器、函數(shù)對(duì)象和算法的模板。
- 容器:類似數(shù)組存儲(chǔ)若干值,切實(shí)同質(zhì)的;
- 迭代器:遍歷容器的對(duì)象,類似遍歷數(shù)組的指針,廣義指針;
- 算法:完成特定的任務(wù);
- 函數(shù)對(duì)象:類對(duì)象或函數(shù)指針。
模板類 vector
erase() 刪除矢量中給定區(qū)間元素。接受兩個(gè)迭代器參數(shù)(該參數(shù)定義了要?jiǎng)h除的區(qū)間),迭代器1指向區(qū)間起始處,迭代器2指向區(qū)間終止處的后一個(gè)位置。
// delete first and second elements data.erase(data.begin(), data.begin() + 2);
insert() 與erase() 功能相反。接受三個(gè)迭代器參數(shù)。param1 指定新元素插入位置,param2 和 param3 定義別插入的區(qū)間(通常是其他對(duì)象)。
// insert [old.begin + 1, old.end) in the front of data data.insert(data.begin(), old.begin() + 1, old.end()); // 此時(shí),超尾元素顯得十分方便 // 在末尾緊挨著插入元素 data.insert(data.end(), old.begin() + 1, old.end());
for_each() 接受三個(gè)參數(shù)。param1 和 param2 是定義容器中區(qū)間的迭代器,param3 指向函數(shù)的指針(函數(shù)對(duì)象)。將被指向的函數(shù)(param3)用于區(qū)間 [param1, param2) 的各個(gè)元素。但是被指向的函數(shù) param3 不可以修改區(qū)間的值。
// 代替for循環(huán) for(auto iter = data.begin(); iter != data.end(); iter++) { showData(*iter); } // replace for with for_each // 注意此處的函數(shù)showData不能修改data的值。 for_each(data.begin(), data.end(), showData);
sort() 排序函數(shù)。
1)接受2個(gè)區(qū)間的迭代器參數(shù),對(duì)元素利用<運(yùn)算符進(jìn)行操作。
2)接受3個(gè)參數(shù),前兩個(gè)指定區(qū)間的迭代器,最后一個(gè)指向要是有的函數(shù)指針(對(duì)象)。這里的函數(shù)類似仿函數(shù)特性,但是形式不同于仿函數(shù)。
區(qū)分全排列(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 循環(huán)。不同于 for_each,基于范圍的for循環(huán)可以修改容器的內(nèi)容。
2.泛型編程
泛型編程旨在編寫?yīng)毩⒂跀?shù)據(jù)結(jié)構(gòu)的代碼(即編寫一套可以適用于所有數(shù)據(jù)結(jié)構(gòu)的函數(shù)代碼)。模板可以按照泛型定義函數(shù)或者類。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C++類的構(gòu)造與析構(gòu)特點(diǎn)及作用詳解
本文章將會(huì)可能會(huì)涉及到匯編的知識(shí),不過(guò)沒(méi)有關(guān)系,我會(huì)講的盡量通俗易懂;另外本篇文章開(kāi)始前,建議了解下什么是函數(shù)重載,這個(gè)概念很簡(jiǎn)單的--有相同的函數(shù)名,但參數(shù)列表不相同的函數(shù),就是函數(shù)重載2022-10-10C語(yǔ)言中判斷兩個(gè)IPv4地址是否屬于同一個(gè)子網(wǎng)的代碼
這篇文章主要介紹了C語(yǔ)言中判斷兩個(gè)IPv4地址是否屬于同一個(gè)子網(wǎng)的代碼,需要的朋友可以參考下2017-09-09C++實(shí)現(xiàn)WebSocket服務(wù)器的案例分享
WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的通信協(xié)議,與HTTP協(xié)議不同,它允許服務(wù)器主動(dòng)向客戶端發(fā)送數(shù)據(jù),而不需要客戶端明確地請(qǐng)求,本文主要給大家介紹了C++實(shí)現(xiàn)WebSocket服務(wù)器的案例,需要的朋友可以參考下2024-05-05