• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
p-boost-q
博客园    首页    新随笔    联系   管理    订阅  订阅
函数模板

1.写一个通用函数:作用是在数组里找到和value值相同的值的索引

template<typename T>
size_t Find(T& value , T *array,size_t size)
{
    for(size_t i = 0;i < size;++i)
    {
        if(array[i] == value)
        {
            return i;
        }
    }
    std::cout << "NOT FOUND" << std::endl;
    return -1;
}
int main()
{    int array[] = {1,2,3,4,5};
    int value = 3;
    size_t size = sizeof(array) / sizeof(int);
    size_t index = Find(value,array,size);

    if(index!= (-1))
    {
        std::cout << index << std::endl;
    }
    return 0;
}

2.函数模板可以特例化

template<typename T>
size_t Find(T& value , T*array,size_t size)
{
    for(size_t i = 0;i < size;++i)
    {
        if(array[i] == value)
        {
            return i;
        }
    }
    std::cout << "NOT FOUND" << std::endl;
    return -1;
}

template<>
size_t Find<const char*>(const char *& value , const char **array,size_t size)
{
    for(size_t i = 0;i < size;++i)
    {
        if(strcmp(array[i],value) == 0)
        {
            return i;
        }
    }
    std::cout << "NOT FOUND" << std::endl;
    return -1;
}
int main()
{const char * arr[] = {"one" , "two" , "three" , "four"};
    const char * value = "oks";
    size_t size = sizeof(arr) / sizeof(char*);
    size_t index = Find<const char*>(value,arr,size);
    if(index != (-1))
    {
        std::cout << index << std::endl;
    }
    return 0;
}

记得一定要实现定义好原模板Find();否则特例化会失败;

posted on 2019-02-08 17:51  p-boost-q  阅读(222)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3