1

我正在尝试从 cstdlib 运行 qsort。功能

qsort( m_all_animals , numberOfAnimals() , sizeof(Animal*) , 比较);

成功执行,但未对 m_all_animals 进行排序。实际上,它对数组没有任何作用。底层数据结构在这里

Animal** m_all_animals;

//the number of elements, I tested it and it works
int numberOfAnimals(){
    int result=0;
    for (int i=0;i<m_size*2;++i){
        if (m_all_animals[i]==NULL)
            break;
        ++result;
    }
    return result;
}

int compare (const void* p1, const void* p2){
        return ((Animal*) p1)->get_size()-((Animal*) p2)->get_size();
}

如果有帮助,我有以下继承层次结构

Animal<-Bear
Bear<-brown_bear
brown_bear<-white_bear
Bear<-panda_bear
Animal<-snail
4

3 回答 3

4

不要qsort()在 C++ 中使用!它很慢,不是类型安全的,并且在用于非 POD 类型时会造成严重破坏。改为使用std::sort()

于 2013-08-04T14:46:02.617 回答
2

你的是一个指针数组Animal,所以你的compare函数实际上需要指向指针的指针Animal

int compare (const void* p1, const void* p2){
        return (*(Animal**)p1)->get_size()-(*(Animal**)p2)->get_size();
}
于 2013-08-04T14:43:06.843 回答
2

你的指针不正确。你有一个指针数组 ( Animal *); 如果你想Animal使用你的compare. 或者您将需要修改compare以使用Animal **.

于 2013-08-04T14:44:13.453 回答