C 功能模板参数

c++ function template parameter

本文关键字:参数 功能      更新时间:2023-10-16

我想知道如何编译此代码。我应该做什么?调用排序函数时,我编写了数据类型。当我将字符数组和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::vectorstd::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]);
            }
        }
    }
}