#include <iostream>
#include <vector>
#include <cstring>
template <typename ty, size_t count>
//内置数组版本
ty max(ty(&arr)[count]) //求数组最大值
{
ty tmp = arr[0];
for(size_t i = 0; i < count; i++)
{
tmp = tmp > arr[i] ? tmp : arr[i];
}
return tmp;
}
//可变数组版本
template <typename ty>//求数组最大值
ty max(std::vector<ty> &vec)
{
ty tmp = vec[0];
for(ty arg : vec)
{
tmp = tmp > arg ? tmp : arg;
}
return tmp;
}
//字符串版本
template <typename ty, size_t count>
const char *max(const char *(&ptr)[count]) //---->此处翻车
/*模板函数具体化.返回最长字符串的地址*/
{
const char *max = ptr[0];
for(size_t i = 1; ptr[i]; ++i)
{
if(strlen(max) < strlen(ptr[i]))
max = ptr[i];
}
return max;
/*const char *p = ptr[0];
for(const char* i = *ptr; *i != '\0'; i++)
{
p = strlen(p) > strlen(i) ? p : i;
}
return p;*/
}
int main(int argc, char const *argv[])
{
int arr[] = {1, 2, 3, 6, 54, 79, 99};
std::cout << "内置类型数组版本 :" << max(arr) << std::endl;
std::vector<float> vec = {3.14, 2.718, 3.163, 1.414, 2.236};
std::cout << "vector版本 :" << max(vec) << std::endl;
//const char *str[4] = {"hello", "fish999999999", "ccc11111", " 0000"};//-->此处翻车
const char *str[] = {"hello", "fish999999999", "ccc11111", " 0000", NULL};
std::cout << "C字符串版本 :" << max<char>(str) << std::endl;
return 0;
}
|