排序不适用于模板类

时间:2018-02-23 21:01:56

标签: c++ templates overloading operator-keyword

我有一个插入排序功能

   void insertionSort(ArrayList<int> myData)
    {

      for (int i = 1; i < myData.getSize(); i++) {

      int index = myData[i];
      int j = i;

      while (j > 0 && myData[j-1] > index) {
         myData.swap(j - 1, j);
         j--;
        }
       myData[j] = index;

      }

    }

使用此交换功能

   template<class TYPE>
   void ArrayList<TYPE>::swap(int from, int to) throw(std::out_of_range)
  {
     int temp = 0;
     temp = this->items[from];
     this->items[from] = this->items[to];
     this->items[to] = temp;

     swapNum++;
   }

这是我的私人方法的样子

TYPE * items;
int currentLength;
static int swapNum;

我有一个重载的[]运算符和一个getSize()函数,我认为我写的很好而且没有对我的问题做出贡献。现在,如果我在main.cpp中执行此操作

     ArrayList<int>m_Data(1);

并在m_Data上附加说4,2,9,1并调用

     insertionSort(m_Data);

我收到两个错误

    1. Error    C2440   '=': cannot convert from 'std::string' to 'int' 

关于交换功能和

    2. The insertion sort doesn't work

1 个答案:

答案 0 :(得分:0)

第一个问题:它应该是TYPE temp = this->items[from]之类的东西。修复后(我使用STL交换)功能工作。好吧,它适用于STL矢量和交换。如果您仍有问题,那么您的数组结构可能无效。

编辑:在功能&#39;插入排序&#39;你不应该有模板(如在交换功能中)吗?