泛型

C++泛型编程风格

STL标准模板库组成

容器 vector list set map
算法 find() sort() replace() merge()
其中:
map:key和value的组合
key由于查找
value用来表示要储存或取出的数据
set:仅含有key,用来判断某值是否存在其中。

泛型算法:

  1. 泛型算法与要操作的元素类型无关,和容器的类型也无关
  2. 泛型算法不在容器上进行直接操作,而是由iterator(first和last)标识迭代元素范围
  3. 泛型算法基于function template

一般编程到泛型编程举例

函数:

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

template <typename elemType>
elemType* find2(const vector<elemType> &vec, const elemType &value)
{
      for(int ix = 0; ix < vec.size(); ++ix)
            if(vec[ix] == value)
            return &vec[ix];
      return 0;
}
template <typename elemType>
elemType* find3(const elemType *array,const int size,const elemType &value)
{
      if(!array || size < 1)
            return 0;
      for(int ix = 0; ix < size; ++ix,++array)
            if(*array = value)
                  return array;
      return 0;
}
template <typename elemType>
elemType* find4(const elemType *first,const elemType *last,const elemType &value)
{
      if (!first || !last)
            return 0;
      for (;first != last; ++first)
            if (*first == value)
                  return first;
      return 0;
}
template <typename elemType>
inline elemType* begin(const vector<elemType> &vec)
      {return vec.empty() ?0:&vec[0]}
inline elemType* end(const vector<elemType> &vec)
      {     
            return vec.empty() ?0:&vec[vec.size()+1]     
      } 

vector<string> svec;
find4(begin(svec),end(svec),search_value);
posted @ 2020-09-12 11:26  peng_best  阅读(90)  评论(0)    收藏  举报