国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

Essential C++(3)泛型編程

2019-11-06 06:32:43
字體:
供稿:網(wǎng)友

STL: 容器:vector , list , set, map…… 算法:find , sort , replace , merge……

假設(shè)給定一個(gè)存儲(chǔ)整數(shù)的vector,以及一個(gè)整數(shù)值,如果此值存在于vector內(nèi), 我們必須返回一個(gè)指針指向該值,反之返回0,表示此值并不在vector內(nèi),以下 便是find.1.0

int* find (const vector<int> &vec, int value){ for (int ix = 0;ix < vec.size(); ++ix) if (vec[ ix ] == value) return &vec[ix]; return 0;}

find.2.0 想辦法讓這個(gè)函數(shù)不僅可以處理整數(shù),也可以處理任何型別(該型別有 equality(相等)運(yùn)算符)

template <typename elemType>elemType* find(const vector<elemType> &vec, const elemType &value ){ for (int ix = 0; ix < vec.size(); ++ix) if (vec[ ix ] == value) return &vec[ix]; return 0;}

find.3.0讓這個(gè)函數(shù)可以同時(shí)處理vector與array內(nèi)的任意類型元素

//增加一個(gè)參數(shù),用來表示array的終點(diǎn)template <typename elemType>elemType* find( elemType *first ,const elemType *last, const elemType &value){//不可以寫 const elemType* first,因?yàn)橄旅婊厥耤onst elemType*返回elemType*//書中這里有錯(cuò)//也可以將返回值改為const elemType* if (! first || ! last) return 0; for (; first !=last; ++first ) if (*first == value ) return first; return 0;}//處理vector,vector可以為空,array不可以,所以我們要先判斷vector是否為零template <typename elemType>inline const elemType* begin(const vector<elemType> &vec){ return vec.empty() ? : 0 :&vec[0]; }//通常將取地址這種操作封裝為函數(shù),這樣子,就可以同時(shí)處理vector和array了find (begin( svec),end (svec),search_value );

泛型指針(iterator) 使用const_iterator來遍歷操作,允許我們讀取vector元素,但不允許任何寫入 vector<string>::const_iterator iter = ce_vec.begin(); 其他用法基本等同于普通指針

exp

//重新設(shè)計(jì)find(),使其可以支持指針與某種容器的iteratorstemplate <typename IteratorType, typename elemType >IteratorTypefind( IteratorType first,IteratorType last, const elemType &value ){ for (; first != last; ++first) if (value == *first) return first; return last;}

繼續(xù)努力的方向是將現(xiàn)有的find()版本演化為泛型算法。 標(biāo)準(zhǔn)庫中有超過60個(gè)泛型算法,以下列出一部分 搜索算法find( ),count( ),adjacent_find( ),find_if( ),count_if(),binary_search(),find_first_of 排序復(fù)制,刪除,替換 關(guān)系 生成,質(zhì)變 數(shù)值 集合

所有容器的共通操作

==!==empty()size()clear()begin(),end()insert(),erase()

序列式容器 vector list deque:前端和末端元素的安插刪除效率最高 push_back( ):在末尾安插一個(gè)元素 pop_back( ):在末尾刪除一個(gè)元素

list和deque還提供 push_front,pop_front() 讀取前端和末端的元素值需要front()和back()

四種 insert函數(shù)變形

iterator insert(iterator position,elemType value )將value插在pos前void insert( iterator position,int count,elemType value)在pos前插入count個(gè)valuevoid insert(iterator1 position,iterator2 first,iterator2 last)在pos前插入first和last的所有元素iterator insert(iterator position )可在position之前插入元素,初值為起類型的默認(rèn)值

兩種erase( )函數(shù)的變形

iterator erase (iterator posit)可以抹除posit所指元素iterator erase (iterator first ,iterator last)可以抹除first,last范圍內(nèi)的元素,first是第一個(gè)被刪除的,last是最后一個(gè)被刪除的下一位
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 睢宁县| 安仁县| 宣威市| 定南县| 邻水| 盐亭县| 丰顺县| 建宁县| 灵丘县| 金平| 厦门市| 陇西县| 孝感市| 金阳县| 丘北县| 息烽县| 兴安县| 怀远县| 赤峰市| 紫云| 扶沟县| 泗洪县| 吐鲁番市| 故城县| 镇原县| 嘉定区| 涪陵区| 沈阳市| 广安市| 丰顺县| 扶沟县| 湖口县| 金华市| 诸城市| 咸丰县| 社旗县| 锡林郭勒盟| 红桥区| 惠水县| 宁安市| 洱源县|