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

          <2006年8月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 鲁甸县| 牟定县| 乌苏市| 武功县| 固始县| 筠连县| 富源县| 武汉市| 胶州市| 龙江县| 手游| 香格里拉县| 恩平市| 武汉市| 凉山| 洞头县| 临夏市| 凤台县| 盐源县| 尤溪县| 曲靖市| 天津市| 星子县| 大方县| 玛纳斯县| 邢台县| 屏南县| 湘潭县| 雷山县| 冕宁县| 富源县| 小金县| 永州市| 临桂县| 石台县| 河津市| 南郑县| 鹤山市| 浮山县| 佛山市| 抚宁县|