我正在尝试编写一个包含数组数组的类,您可以使用函数 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);
}
我确信我完全混淆了数组指针。
但我似乎无法找到解决方案。
这里的大缺陷在哪里?
答案 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];
在你的析构函数中。