模板不接受C ++中的参数

时间:2014-11-14 03:29:43

标签: c++ templates

我正在学习C ++,所以如果这是一个愚蠢的问题,请原谅我,但我已经有一段时间了。

我正在尝试使用插入排序对矢量进行部分排序。

这是功能:

template <typename T> // template, typename: pg 419
void insertion_sort (T *a, long int n) { 
  for (long int i = 1; i < n; i++) {
    for (long int j = i; (j > 0) && (a[j] < a[j-1]); j--) {
      std::swap(a[j], a[j-1]);  // swap: pg 1294, 1297
    }
  }
}

这是我的合并功能代码:

    template <typename T> void sort(vector<T> &a, vector<T> & aux, long int low, long int high) {
        long int size = high - low + 1;
        if (size < INSERTION_THRESHOLD) {
                insertion_sort(a[low], (long int) a.size() - low); 
        }
        else {
                if (high <= low) {
                        return;
                }
                long int mid  = low + (high - low)/2;
                sort(a, aux, low, mid);
                sort(a, aux, mid + 1, high);
                merge(a, aux, low , mid, high);
        }
}

以下是我在编译时遇到的错误:

    sort.cpp: In instantiation of ‘void sort(std::vector<T>&, std::vector<T>&, long int, long int) [with T = double]’:
    sort.cpp:147:82:   required from here
    sort.cpp:71:51: error: no matching function for call to ‘insertion_sort(__gnu_cxx::__alloc_traits<std::allocator<double> >::value_type&, long int)’
       insertion_sort(a[low], (long int) a.size() - low); 
                                                       ^
    sort.cpp:71:51: note: candidates are:
    In file included from sort.cpp:6:0:
    sort.hpp:11:28: note: template<class T> void insertion_sort(T*, long int)
     template <typename T> void insertion_sort (T *a, long int n)

任何帮助表示赞赏!

0 个答案:

没有答案