gpt4 book ai didi

C++:函数模板问题

转载 作者:搜寻专家 更新时间:2023-10-31 01:15:02 26 4
gpt4 key购买 nike

我在修改 C++ 函数时遇到问题,以便它适用于任何数据类型。任何和所有帮助将不胜感激。下面是我的代码,以及我一直遇到的一个错误。

// This program demonstrates the QuickSort Algorithm.
#include <iostream>
#include <algorithm>
using namespace std;


//************************************************
// quickSort uses the quicksort algorithm to *
// sort set, from set[start] through set[end]. *
//************************************************

template <class T>
void quickSort(T set[], int start, int end)
{
T pivotPoint;

if (start < end)
{
// Get the pivot point.
pivotPoint = partition(set, start, end);
// Sort the first sub list.
quickSort(set, start, pivotPoint - 1);
// Sort the second sub list.
quickSort(set, pivotPoint + 1, end);
}
}

//**********************************************************
// partition selects the value in the middle of the *
// array set as the pivot. The list is rearranged so *
// all the values less than the pivot are on its left *
// and all the values greater than pivot are on its right. *
//**********************************************************

template <class T1>
int partition(T1 set[], int start, int end)
{
int pivotValue, pivotIndex, mid;

mid = (start + end) / 2;
swap(set[start], set[mid]);
pivotIndex = start;
pivotValue = set[start];
for (int scan = start + 1; scan <= end; scan++)
{
if (set[scan] < pivotValue)
{
pivotIndex++;
swap(set[pivotIndex], set[scan]);
}
}
swap(set[start], set[pivotIndex]);
return pivotIndex;
}


//**********************************************
// swap simply exchanges the contents of *
// value1 and value2. *
//**********************************************

template <class T>
void swap(T &value1, T &value2)
{
int temp = value1;

value1 = value2;
value2 = temp;
}

int main()
{
const int SIZE = 10; // Array size
int count; // Loop counter

// need to override the [] function?
int array[SIZE] = {7, 3, 9, 2, 0, 1, 8, 4, 6, 5};

// Display the array contents.
for (count = 0; count < SIZE; count++)
cout << array[count] << " ";
cout << endl;

// Sort the array.
quickSort(array, 0, SIZE - 1);

// Display the array contents.
for (count = 0; count < SIZE; count++)
cout << array[count] << " ";
cout << endl;
return 0;
}

对于 quicksort() 函数中读取 pivotPoint = partition(set, start, end); 的行,我收到此错误:

main.cpp:24: error: no matching function for call to 'partition(int*&, int&, int&)'

如果有人能告诉我这是什么意思,以及如何适应它,我将不胜感激。

最佳答案

partition函数在使用前需要声明。

partition 定义移到 quicksort 定义之前或在该位置添加声明:

template <class T1>
int partition(T1 set[], int start, int end);

关于C++:函数模板问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10567839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com