C++ qsort() 函数调用时实参与形参不兼容的问题解决

《剑指OFFER》刷题笔记 —— 扑克牌顺子

LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。

ERROR:  VS 的错误提示 —— int (Solution::*) (const void* a, const void* b) 类型的实参与 int (_cdecl::*) (const void* , const void* ) 类型的形参不兼容****

1class Solution { 2public: 3  bool IsContinuous(vector<int> numbers) { 4 if (numbers.size() != 5) 5 return false; 6 //qsort(&numbers, numbers.size(), sizeof(int), compare); 7 qsort(&numbers[0], numbers.size(), sizeof(int), compare); 8 //sort(numbers.begin(), numbers.end()); 9 10 int numZeros = 0; 11 int diff = 0; 12 for (int i = 0; i < numbers.size() - 1; ++i) { 13 if (numbers[i] == 0) 14 ++ numZeros; 15 else { 16 if (numbers[i] == numbers[i + 1]) 17 return false; 18 diff += numbers[i + 1] - numbers[i] - 1; 19 } 20 } 21 return (numZeros < diff) ? false : true; 22 } 23   24  int compare(const void *a, const void *b) { 25   return (*(int*)a - *(int*)b); 26  } 27 28};

CORRECT:

1int compare(const void *a, const void *b) { 2  return (*(int*)a - *(int*)b); 3} 4 5class Solution { 6public: 7  bool IsContinuous(vector<int> numbers) { 8 if (numbers.size() != 5) 9 return false; 10 //qsort(&numbers, numbers.size(), sizeof(int), compare); 11 qsort(&numbers[0], numbers.size(), sizeof(int), compare); 12 //sort(numbers.begin(), numbers.end()); 13 14 int numZeros = 0; 15 int diff = 0; 16 for (int i = 0; i < numbers.size() - 1; ++i) { 17 if (numbers[i] == 0) 18 ++ numZeros; 19 else { 20 if (numbers[i] == numbers[i + 1]) 21 return false; 22 diff += numbers[i + 1] - numbers[i] - 1; 23 } 24 } 25 return (numZeros < diff) ? false : true; 26 } 27   28};

注意:

C++ 排序请使用 sort(),不要使用 C 语言中的 qsort();

转一下 https://stackoverflow.com/questions/12308243/trying-to-use-qsort-with-vector 的大佬评论:

First of all, DON'T.

If you just want to muck about, you can replace iterators with actual pointers:

qsort(&numbers[0], numbers.size(), sizeof(int), compvar);

Apart from not doing all the work std::sort does, there is one unexpected thing about qsort. It is slower.

  1. sort (myvector1.begin(), myvector1.end());

  2. sort (myvector2.begin(), myvector2.end(), myfunction);

  3. sort (myvector3.begin(), myvector3.end(), myobject);

  4. qsort(&myvector4[0], myvector4.size(), sizeof(int), cmyfunction);

4 is the slowest, followed by 2 (function pointer passed to std::sort). 1 and 3 (default and functor) are the fastest (compiled with gnu's g++ with -O3 flag).

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

swap空间的增减方法

(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap

C++ qsort() 函数调用时实参与形参不兼容的问题解决 - HelloWorld