c++泛型編程
1 Standard Template Library (STL)主要有兩種組件構成,一時容器container 另一種組件是 操作
?這些容器類的泛型算法
?1 vector and list 是序列是容器
?2 map 是一對keyvalue 組合 3 set 其中僅含有key 我們對它驚醒查詢操作。主要是判斷某之是否存在其中。
2 指針的算術運算
?當數組被傳遞給函數,僅有第一個元素的地址會被傳遞
?template <typename elemType>
?elemType * find(const elemType *array,int size,const elemType &value)
?{
?? if(!array||size<1)
??? return 0;
?? for(int i=0;i<size;i++)
?? {
????? if(array[i]==value)
?????? return &array[i];
?? }
?? /*
??? for(int i=0;i<size;i++,array++)
?? {
????? if(*array==value)
?????? return array;
?? }
?? */
?? return 0;
?}
?template <typename elemType>
?elemType * find(const elemType *first,const elemType *last,const elemType &value)
?{
?? if(!fist||!last)
??? return 0;
?? for(;first!=last;first++)
??? if(*first==value)
??? return first;
?? return 0;
?}
?由于vector 和array 相同,
array[2] equals *(array+2) 2 指兩個elemType 單位
?由于vector 和array 相同,都是以一塊賴寧許內存存儲所有元素,所以我們可以使用和array 一樣的處理處理
?方式
?vector<string> svec
?find(&vec[],&svec[vec.size()].serch_value);
3 了解Iterator
? 1 template<typename elemType>
? void display(const vector<elemType>&vec,ostream &os)
? {
???? vector<elemType>::const_iterator iter=vec.begin();
???? vector<elemType>::const_iterator end_it=vec.end();
???? for(;iter !=end_it;++iter)
???? {
?????? os<<"ite3r"<<endl;
???? }
? }
?? 2 find
?? template<typename IteratorTypes,typename elemType>
?? IteratorType
?? find(IteratorType first,IteratorType last,count elemType &values)
?? {
????? for(;first!=last;++first)
?????? if(value==*first)
???????? return first;
?? }
??????? return last;
?? const int siz3=9;
?? int ia[size]={1,2,3,4,5,6,7,8,9};
?? vector<int> vec=(ia,ia+size);
?? list<int> list=(ia,ia+size);
??
?? int *pia=find(ia,ia+size,3);
?? if(pia!=ia+size)
???? //find...;
?? vector<int>::iterator it;
?? it=find(vec.begin(),vec.end,1024);
?? if(it!=vec.end())
??? //find...
?? list<int>::iterator it;
?? it=find(list.first().list.end,4);
4 所有容器的共同操作
?equality(==),assignment(=),empty(),size(),clear()
?begin() 返回一個iterator,只向容器的第一個元素
?end()?? 返回一個iterator,只向容器的最后?一個元素
5 使用序列容器
?1 vector 和list 是兩個最主要的序列式容器 vector 式一塊連續的內存。取數據效率較高,但是存數據
?但是如果在任意位置插入或刪除數據,效率就比較低。(但是在最后一位添加和刪除數據效率都比較高)
?2 list 系以雙向連接來存儲內存,可以任意執行前進或后退操作,可以在任意位置安插或刪除數據。
?3 deque 以連續的內存存儲元素,但是deque 在最前端元素的安插和刪除操作更有效,末端相同
?4 #include<vector>
?? #include<list>
?? #include<deque>
?5 產生空的容器
?? list<string> slist;
?? vector<int> ivec;
?6 產生特定大小的容器,每個元素都以千默認的值作為初值
?? list<int> ilist(1024);
?? vector<string> svec(32);
?7產生特定大小的容器,并為每個軟速制定初值
? vector<int> ivec(10,-1)
? list<string> slist(16,'unassigned');
?8 int ia[9]={1,2,3,4,5,6,7,8,9};
?? vector<int> fib(ia,ia+8);
?9 根據某個容器產生新容器,復制軟來容器的元素,作為新容器的初值
? list<string> slist;
? list<string> slist2<slist>
?10 push_back(),pob_back() 在容器末尾進行安插和刪除操作。在deque和list可以用push_front
? 和pop_front 在最前面天加和刪除操作。
?11 fornt() 和back()可以取回最前和最后的值?
?12 iterator insert(iterator position,elemType value)將value 安插于position 之前,返回一個iterator
?指向被安插的元素
? list<int>ilist;
? list<int>:: it=ilist.begin();
? while(it!=ilist.end())
?? if(*it>=ival)
?? {
????? ilist.inert(it,ival);
????? break;
?? }
? if(it==ilist.end())
??? ilist.pushi_back(ival);?
posted on 2006-08-21 21:40 康文 閱讀(492) 評論(0) 編輯 收藏 所屬分類: c\c++