使用cstdlib中的qsort
Using the qsort from cstdlib
我正在尝试从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 **
。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- qsort 不适用于我的 impl 中的浮点类型。怎么了?
- 为什么在此代码中,C++中的排序比 C 中的 qsort 慢得多(对于字符串数组)
- qsort()中的char*和char []之间的混淆
- 使用cstdlib中的qsort
- qsort中的无效指针算法
- C++中使用qsort排序的结构
- 解释compareX在qsort()库函数中的工作
- cmp函数qsort中未初始化的值