泛型
C++泛型编程风格
STL标准模板库组成
| 容器 | vector | list | set | map |
|---|---|---|---|---|
| 算法 | find() | sort() | replace() | merge() |
| 其中: | ||||
| map:key和value的组合 | ||||
| key由于查找 | ||||
| value用来表示要储存或取出的数据 | ||||
| set:仅含有key,用来判断某值是否存在其中。 |
泛型算法:
- 泛型算法与要操作的元素类型无关,和容器的类型也无关
- 泛型算法不在容器上进行直接操作,而是由iterator(first和last)标识迭代元素范围
- 泛型算法基于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);

浙公网安备 33010602011771号