qsorting一个类指针数组

时间:2011-09-20 10:43:14

标签: c++ class qsort

我已经阅读了很多关于如何做到这一点的材料。不幸的是,他们都使用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’

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

1 个答案:

答案 0 :(得分:4)

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

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