我正在尝试从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
答案 0 :(得分:4)
不要在C ++中使用qsort()
!它很慢,不是类型安全的,并且在非POD类型上使用时会破坏破坏。请改用std::sort()
。
答案 1 :(得分:2)
你的是指向Animal
的指针数组,所以你的compare
函数实际上指向指向Animal
的指针:
int compare (const void* p1, const void* p2){
return (*(Animal**)p1)->get_size()-(*(Animal**)p2)->get_size();
}
答案 2 :(得分:2)
您的指针不正确。你有一个指针数组(Animal *
);如果要使用Animal
,它应该是compare
数据类型的数组而不是指针。或者,您需要修改compare
以使用Animal **
。