2011-05-08 41 views
2

我发现这个合并排序函数,但我不知道如何使用它。 请帮助如何使用这个C++模板函数。简单的初学者问题

#include<iostream> 
#include<stdlib.h> 
#include<vector> 
using namespace std; 

template <typename Comparable> 
void mergeSort(vector<Comparable*> &v) 
{ 
    mergeSortPart(v, 0, v.size() - 1); 
} 

template <typename Comparable> 
void mergeSortPart(vector<Comparable*> &v,int first,int last) 
{ 
    if(first < last) 
    { 
     int mid = (first + last)/2; 
     mergeSortPart(v, first, mid); 
     mergeSortPart(v, mid + 1, last); 
     merge(v, first, mid, last); 
    } 
} 
template <typename Comparable> 
void merge(vector<Comparable*> &v, int first, int mid,int last) 
{ 
    vector<Comparable*> temp(v.size()); 
    int first1 = first; int last1 = mid; int first2 = mid + 1; 
    int last2 = last; int index = first1; 
    while((first1 <= last1) && (first2 <= last2)) 
    { 
     if(*v[first1]<*v[first2]) 
      temp[index++] = v[first1++]; 
     else 
      temp[index++] = v[first2++]; 
    } 
    while(first1 <= last1) 
     temp[index++] = v[first1++]; 
    while(first2 <= last2) 
     temp[index++] = v[first2++]; 
    for(index = first; index <= last; index++) 
     v[index] = temp[index]; 
} 

void main() 
{ 
    vector<int> arr (20); 
    for(int i=0;i<20;i++) 
     arr[i]=i; 
    mergeSort<int>(arr); 
} 

main功能我想申报6个元素的数组,并呼吁mergeSort模板的功能,但它给出了一个编译错误:

Error 1 error C2664: 'mergeSort' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'std::vector<_Ty,_Ax> &'

我不是很熟悉,模板功能,因此如果有人能告诉我如何使用这个功能,这将是一种享受

谢谢

+2

如果这是家庭作业,你应该将其标记为此类。 – 2011-05-08 07:27:36

+0

,如果它不来看看[的std :: stable_sort()](http://en.literateprograms.org/Merge_sort_(C_Plus_Plus)) – 2011-05-08 07:32:29

+0

当模板处理错误,它读取整个错误是非常重要的信息。特别是,它可能包含了那个'_Ty'和'_Ax'在那个特定的实例中。 – 2011-05-08 08:09:46

回答

0

由于mergeSort的参数是vector<Comparable*>,它只能对指针的矢量进行排序,而不能对整数或其他对象的矢量进行排序。

+0

是Comparable一个新的数据? – user743677 2011-05-08 07:36:38

+0

这里'Comparable'是一个模板参数,所以只是任何类型。问题是该函数被指定为采用“Comparable *”的向量,而不是“Comparable”。这意味着实际参数必须是指向应该排序的对象的指针的向量。 – 2011-05-08 07:44:17

+0

对于这样的小菜很抱歉。但我真的是全新的C + +,无法让我的头在这一个。当我在C++中搜索向量或模板时,我单独获取它们的信息,但没有太多结合这两者的教程。 – user743677 2011-05-08 07:44:48

0

你忽略了错误信息的最相关的部分:各类型的_Ty,其在一种情况下会int和其他int*

template<typename Comparable> mergeSort需要vector<Comparable*>&说法。

您明确指定intComparable并通过vector<int>,而它会想要vector<int*>

+0

嗨ildjarn,我很安静新的C++,你可以显示正确的方式来使用它请。 – user743677 2011-05-08 07:33:06

+0

好的..我试过\t vector arr(20); \t对(INT I = 0; I <20;我++) \t \t * ARR [I] = I; \t mergeSort (arr);但它仍然不起作用 – user743677 2011-05-08 07:38:54