2011-05-08 40 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