使用cstdlib中的qsort

Using the qsort from cstdlib

本文关键字:qsort 中的 cstdlib 使用      更新时间:2023-10-16

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

qsort(m_all_animals,numberOfAnimals(),sizeof(Animal*),compare);

执行成功,但未对m_all_aimals进行排序。实际上,它对数组没有任何作用。下面的数据结构是

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

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

Yours是指向Animal的指针数组,因此compare函数实际上接受指向Animal:的指针

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

您的指针不正确。您有一个指针数组(Animal *);如果您想使用compare,它应该是Animal数据类型的数组,而不是指针。或者,您需要修改compare才能使用Animal **