对类指针数组进行排序

qsorting an array of class pointers

本文关键字:排序 数组 指针      更新时间:2023-10-16

我已经阅读了很多关于如何做到这一点的材料。不幸的是,它们都求助于使用qsort(通常是排序)以外的东西。然而,这对我来说是不可能的,因为我不允许使用算法库中的任何东西。我必须从头开始实现这个。我有什么:

class String {
public:
        char* string;
        int size;
        String(char* string=0, int size=0) {
                this->string = string;
                this->size = size;
        }
        ~String() {
                delete [] string;
        }
};
int compare(void* obj1, void* obj2) {
        String* str1 = ((String*) obj1)->getColumn(column);
        String* str2 = ((String*) obj2)->getColumn(column);
        int i = strcmp(str1->string, str2->string);
        delete str1;
        delete str2;
        return i;
}
class ArrayList {
        int count;
        int arraySize;
public:
        String** list;
        ArrayList() {
                count = 0;
                arraySize = 10;
                list = new String*[arraySize];
        }
        ~ArrayList() {
                while(size()) {
                        delete remove();
                }
        }
        void add(String* s) {
                if(count==arraySize)
                        grow();
                list[count++] = s;
        }
        String* remove() {
                return list[count--];
        }
        String* get(int i) {
                return list[i];
        }
        int size() {
                return count;
        }
private:
        void grow() {
                String** temp = new String*[arraySize*=2];
                for(int i=0; i<count; i++) {
                        temp[i] = list[i];
                }
                delete [] list;
                list = temp;
        }
};

和我(当前)调用qsort,虽然我已经尝试了很多组合:

qsort(list->list, list->size, sizeof(String**), compare);

无论我传递什么,我总是得到错误:

argument of type ‘int (ArrayList::)()’ does not match ‘size_t’

我在这里复制的代码并没有包括所有内容,但我已经验证了所有部分都按预期工作,所以不用担心缺少方法之类的。

您使用了list->size而不是list->size()。代码应该是:

qsort(list->list, list->size(), sizeof(String**), compare);