逍遥游

算法慎用swap函数

先介绍一下swap(a,b)函数吧,参数有两个a和b,作用就是交换ab的值,采用的是传引用的方式,所以使用的时候就像调用一个函数一样简单。这也算是C++对于C的一点方便之处吧。用一句代码代替了三句,这对惜字如金的我来说是个好东西,经常会用到。

但是有一次在做数据结构作业的时候发现我的程序跑的特别慢(老师采用的是竞赛的考察模式),当时找拖慢速度的代码找了很久,一直没有找到。后来实在是没办法优化了,就把swap给替换掉了(毕竟知道函数调用比直接写代码要慢一点),结果惊奇地发现,程序快了10倍以上!很震惊。

后来问了老师,老师也觉得不可思议。swap函数使用模板的形式实现的,它比一般的函数调用还要慢,但是差别这么大是让人没有想到的。

今天本来想重现一下,比较一千万次的调用和代码所需的时间差异,但是编译器好像智能地优化了,0毫秒!

不知道问什么,如果有大牛知道的话,恳请不吝赐教!然后还有就是,涉及算法的代码还是自己写比较快,就像自己写的快速排序是要比标准库里的要快。


多说停止服务,disqus引导注册太过分,暂时不上评论系统了。有机会自己造轮子吧。邮箱:input@newnius.com