- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
const的使用,const char * const foo(char const * const str) const;什么意思? 作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 const一般用来表示常量,在你写的程序中不希望被改变的值就要明确声明为常量类型,这样你试图改变常量的值的时候就会报错,常量可以这样写const float pi=3.1415926;也可以这样写float const pi=3.1415926;他们的含义是一样的。因此如果这样写:const float const pi=3.1415926;就会说重复定义。duplicate `const而对于指针const在指针的左边或右边有不同的含义,const在指针左边表示所指的东西是常量,例如:const char *str=foo;或者这么写char const *str=foo;都是表示foo是不能改变的,因此你要对const的变量做操作,例如:strcpy(str,ABC);注意strcpy的原形是char *strcpy(char *dest, const char *src);型参一使用的是char *不是常量指针,因此对常量做修改的时候就会报错,类似这样:cannot convert `const char * to `char * for argument `1 to strcpy (char*, const char *)当然,这只是编译时的操作,对于流氓程序员仍旧可以改变常量的值,例如strcpy((char *)str,ABC);或者char *strTmp=str;strcpy(strTmp,ABC);但是不管怎么样,把const写上,便于发现减少程序员犯低级错误,例如strcpy把目标和源搞反了。现在在来说说const在*右边的情况,这种情况表示指针不允许改变,例如:char * const str=foo;str=XIXI; //haha 这样被我限制了,不可以的。这时编译会出现,assignment of read-only variable `str,看连指针本身都不能改变了。现在大家再看我以前提的问题:const char * const foo(char const * const str) const;其中第一个const表示返回的是个const,不能改变的值,因此你不能这么用strcpy(foo(xixi),abc);第二个const表示指针不能改变,理论上是不能这样用,foo(xixi)=oo;但是函数的返回值本身就是readonly的因此,实际这样写也是不成立的,这个const可以省略。第3个表示 str是个常量,注意我在这里故意放在char的后面就是为了和函数返回值放的位置区分,实际放在哪里都是一样的,第4个const表示str指针不能指别的东西。最后一个const是C++中出现的,只能用在方法中,表示这个方法不改变对象中的任何值。在这里的所有const都是为了有效的检查是否把某些不该改变的东西给改变了,但是记住:任何方法都不能防止真正的流氓程序员,这只是让你们尽量在编译的时候解决程序可能出现的问题。
冒泡排序的算法分析与改进
交换排序的基本思想是:两两比较等待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。
?
冒泡排序
?
1、排序方法
将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上飘浮。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
(1)初始
R[1..n]为无序区。
?
(2)第一趟扫描
从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。即依次比较(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);对于每对气泡(R[j+1],R[j]),若R[j+1].keyR[j].key,则交换R[j+1]和R[j]的内容。
第一趟扫描完毕时,最轻的气泡就飘浮到该区间的顶部,即关键字最小的记录被放在最高位置R[1]上。
?
(3)第二趟扫描
扫描R[2..n]。扫描完毕时,次轻的气泡飘浮到R[2]的位置上……
最后,经过n-1 趟扫描可得到有序区R[1..n]
注意:
第i趟扫描时,R[1..i-1]和R[i..n]分别为
文档评论(0)