C 功能模板参数
c++ function template parameter
我想知道如何编译此代码。我应该做什么?调用排序函数时,我编写了数据类型。当我将字符数组和int编号作为用于排序函数的参数时,在排序函数中,他们无法将char数组更改为int类型,我不知道该怎么办。
#include <iostream>
using namespace std;
template <typename T>void Sort(T arr, int size);
int main()
{
int arr1[] = { 33,42,5,87,39,72,15 };
int num = sizeof(arr1) / sizeof(arr1[0]);
Sort(arr1, num);
for (int i = 0; i < num; i++)
{
cout << arr1[i] << " ";
}
cout << "n";
char arr2[5] = { 'C','E','G','F','U' };
Sort<int>(arr2, 5);
for (int i = 0; i < 5; i++)
{
cout << arr2[i] << " ";
}
cout << "n";
return 0;
}
template <typename T>void Sort(T arr, int size)
{
for (int i = 0; i < size - 1; i++)
{
for (int j = i + 1; j < size; j++)
{
if (arr[i] > arr[j])
{
T temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
您没有将arr
参数声明为数组,它只是一个变量。
template <typename T>void Sort(T arr[], int size);
或
template <typename T>void Sort(T *arr, int size);
在Sort
中,temp
不是正确的类型:
template <typename T>
void Sort(T arr, int size)
{
for (int i = 0; i < size - 1; i++)
{
for (int j = i + 1; j < size; j++)
{
if (arr[i] > arr[j])
{
T temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
您应该使用auto
代替T
,或创建交换函数:
template <typename T>
void swap(T& t1, T& t2)
{
// Real version would use move assignment instead of copy
T temp = t1;
t1 = t2;
t2 = temp;
}
更为通用,您可以通过参考来获取参数 arr
(如当前,只能由指针使用,甚至不使用 T*
作为arg)。因此,您的代码现在也与std::vector
,std::array
一起使用。
template <typename T>
void Sort(T& arr, int size)
{
for (int i = 0; i < size - 1; i++)
{
for (int j = i + 1; j < size; j++)
{
if (arr[i] > arr[j])
{
swap(arr[i], arr[j]);
}
}
}
}
相关文章:
- 对可变参数使用声明.如何选择正确的功能
- 如何在C++中调用默认模板功能参数?
- 如何从其他功能C++访问参数?
- 如何定义可变参数类模板的成员模板功能
- C++ std::enable_if - 第二个参数的功能
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- 具有C++迭代器参数的多功能函数
- "(void) cast"与功能有什么区别 "__attributes__"来沉默未使用的参数警告?
- C 函数调用包装器包含类成员功能作为模板参数
- 非拖动功能模板参数包的合法使用
- 组件X86转换为ARM功能呼叫,其中有不同数量的参数为ARM
- 公共功能以私人课程为参数
- 如何部分专业化功能以用元组元素作为参数调用功能
- 如何存储指针以功能模板,该模板将可呼叫对象作为其参数之一
- std ::功能作为默认参数的功能
- C 功能模板指定第二个模板参数类型
- 传递多个参数的功能,该函数将类包含到其他函数
- 别名一个模板函数,该功能没有参数可更简洁
- 如何推断for_each的模板参数功能
- 用户界面-GUI和文本模式C++设计,以消除冗余(可选参数?功能过载?)