在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表:
要使用此函数仅仅需用#include <algorithm> sort就可以使用,语法描写叙述为: sort(begin,end),表示一个范围,比如: int _tmain(int argc, _TCHAR* argv[]) 输出结果将是把数组a按升序排序,讲到这里可能就有人会问怎么样用它降序排列呢?这就是下一个讨论的内容.
一种是自己编写一个比較函数来实现,接着调用三个參数的sort:sort(begin,end,compare)就成了。对于list容器,这种方法也适用,把compare作为sort的參数就能够了,即:sort(compare). 1)自己编写compare函数: bool compare(int a,int b) } int _tmain(int argc, _TCHAR* argv[]) 2)更进一步,让这样的操作更加能适应变化。也就是说,能给比較函数一个參数,用来指示是按升序还是按降序排,这回轮到函数对象出场了。 为了描写叙述方便,我先定义一个枚举类型EnumComp用来表示升序和降序。非常easy: enum Enumcomp{ASC,DESC}; 然后開始用一个类来描写叙述这个函数对象。它会依据它的參数来决定是採用“<”还是“>”。 class compare 接下来使用 sort(begin,end,compare(ASC)实现升序,sort(begin,end,compare(DESC)实现降序。 主函数为: int main() 3)事实上对于这么简单的任务(类型支持“<”、“>”等比較运算符),全然不是必需自己写一个类出来。标准库里已经有现成的了,就在functional里,include进来即可了。functional提供了一堆基于模板的比較函数对象。它们是(看名字就知道意思了):equal_to<Type>、not_equal_to<Type>、greater<Type>、greater_equal<Type>、less<Type>、less_equal<Type>。对于这个问题来说,greater和less就足够了,直接拿过来用:
int _tmain(int argc, _TCHAR* argv[]) 4)既然有迭代器,假设是string 就能够使用反向迭代器来完毕逆序排列,程序例如以下: int main()
qsort(): 原型: 实例: int main() 相关: 1)why你必须给予元素个数? 由于阵列不知道它自己有多少个元素 2)why你必须给予大小? 由于 qsort 不知道它要排序的单位. 3)why你必须写那个丑陋的、用来比較俩数值的函式? 由于 qsort 须要一个指标指向某个函式,由于它不知道它所要排序的元素型别. 4)why qsort 所使用的比較函式接受的是 const void* 引数而不是 char* 引数? 由于 qsort 能够对非字串的数值排序.
当然对于排序函数还有其它的使用方法,今天就仅仅说这些,我也正在学习中,上述仅仅是发表了一点自己的拙见,最后声明上诉实例是基于VC++2008。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论