简介:我想显式地显示最长的字符串,我以为是“Carmelo Anthony”,结果是“Jordan”。我知道使用通用模板版本而不是显式模板版本。所以它只是比较点的值(地址值),对吧?但是我怎么能看到“卡梅罗·安东尼”呢?感谢您回答我的第一篇文章!
#include <iostream>
#include <cstring> //for strlen()
template <class T> //general template
T maxn (T arr[], int n);
template <> char * maxn<char *>(char * arr[], int n); //explicit specialization
int main()
{
using namespace std;
int intArr[6] = {1, 2, 34, 6, 9, 10};
double douArr[4] = {2.34, 90.6, -83.872, -0.23};
const char * arr[5] =
{
"Hello World",
"Kobe Bryant",
"Lebron James",
"Carmelo Anthony",
"Jordan"
};
std::cout << maxn (intArr, 6) << std::endl;
std::cout << maxn (douArr, 4) << std::endl;
std::cout << maxn (arr, 5) << std::endl;
return 0;
}
template <class T>
T maxn (T arr[], int n)
{
T maxValue = arr[0];
for (int i = 1; i < n; i++)
{
maxValue = maxValue > arr[i] ? maxValue:arr[i];
}
return maxValue;
}
template <> char * maxn<char *>(char * arr[], int n)
{
char * p= arr[0]; //pointer p points to the present longest string
for (int i = 1; i < n; i++)
{
p = strlen (arr[i]) > strlen (p) ? arr[i] : p;
}
return p;
}