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 康文 阅读(487) 评论(0)  编辑  收藏 所属分类: c\c++


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 
<2006年8月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜