c++ - 使用 cstdlib 中的 qsort

标签 c++ qsort

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

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

执行成功但没有对 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

最佳答案

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

关于c++ - 使用 cstdlib 中的 qsort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18044091/

相关文章:

c++ - 将 qsort() 与类指针一起使用

c++ - 将 std::enable_if 从参数移动到模板参数

c++ - 这些代码有什么不同吗?

c++ - 如何安全地结束一个线程

c++ - 获取 H5::DataSet 的 hid_t 和 path-in-file 以使用 H5OCopy

c - 排序时保持两个数组的顺序相同

c - 使用 qsort、bsearch 帮助处理 C 中的指针

callback - luajit qsort回调示例内存泄漏

c++ - 声明的 int 具有随机起始值

c - C 中的快速排序实现?