模块化快速实现(C ++)

时间:2014-05-05 07:11:15

标签: c++ arrays pointers object quicksort

我正在尝试编写一个包含数组数组的类,您可以使用函数 myArray.quicksort()对其进行排序。 在创建一个新的 Array 的Objekt时,我将构造函数传递给它,然后填充它:

public: int Items[];

    /*-- Constructor --*/
    Array(int n){
        length = n;
        for(int i=0; i<length; i++){
            int zahl;
            Items[length];
            cout << "Item" << i << ": ";
            cin >> number;
            Items[i] = number;
        }
     ...

创建数组后,这个函数打印出来就可以了:

void Array::show(){
    for(int i=0; i<this->length; i++){
        cout << this->Items[i] << " ";
    }
}

然而,在我尝试对其进行排序后,它会打印出废话:

void Array::quickSort(int left, int right){
  int i=left, j=right;
  int tmp;
  int pivot = this->Items[(left + right) / 2];

  while(i <= j){
        while (this->Items[i] > pivot)
              i++;
        while (this->Items[j] < pivot)
              j--;
        if (i <= j) {
              tmp = this->Items[i];
              this->Items[i] = this->Items[j];
              this->Items[j] = tmp;
              i++;
              j--;
        }
  };

  if (left < j)
        quickSort(left, j);
  if (i < right)
        quickSort(i, right);
}

我确信我完全混淆了数组指针。 但我似乎无法找到解决方案。
这里的大缺陷在哪里?

1 个答案:

答案 0 :(得分:0)

标准C ++没有flexible array members(就像C99一样)。

如果数组长度是编译时间常量,那么您不需要Array类,而是使用std::vector<int>(或者使用std::array和C ++ 11)

如果您要声明包含Array的{​​{1}}类,请按照Joachim Pileborg注释中的提示操作,了解rule of three(在C ++ 11中,它成了五的规则,所以声明:

Items
在您的课程中

,然后使用

初始化它
int *Items;

在其构造函数[s]中,并使用

将其销毁
Items = new int[n];
在你的析构函数中