【STL】算法细节

一、概论

1、质变算法--会改变操作对象的值

2、非质变算法-不改变操作对象的值

3、所有泛型算法的前两个参数都是一对迭代器

 

二、算法的泛化过程

1、将一个叙述完整的算法转化为程序代码,是任何训练有素的程序员胜任愉快的工作。

2、泛化是一个渐进过程,从具体到抽象的过程。

3、迭代器是一个行为类似指针的对象,在泛化过程中承担重要的角色。

4、STL算法在效率上的考虑甚为周详,基本上可以算是效率最佳算法,通过特定的数据结构来实现特定的算法,做算法分析时

可以看到其在时间复杂度和空间复杂度上表现很好。

 

三、算法的一些细节

1、STL的所有关系型容器都拥有自动排序功能,所以不需要用到sort算法,至于序列式容器中的stack、queue、priority queue

都有特定的出入口,不允许用户对元素排序,剩下的vector、deque,迭代器属于random access iterator,适合使用

sort算法,而list的迭代器是双向的,不适合使用sort算法。

2、sort一定要求random access iterator,sort算法在数据量大时采用Quick sort,分段递归排序,一旦分段后的数据量小于

某个门槛,就改用insertion sort,如果递归层次过深,还会改用heap sort

3、copy是一个常常被调用的函数,SGI STL的copy用尽各种办法,包括函数重载、型别特性、偏特化等,无所不用其极的加强效率。

 

四、总结

1、再好的编程技巧,也无法让一个笨拙的算法起死回生,选择了错误的算法,便注定了失败的命运。

2、特定的算法往往搭配特定的数据结构,所以掌握数据结构也是学好算法的关键。

3、算法是程序的灵魂,一个好的算法能够帮助快速有效的解决问题,并且提供一些新的思路来进行项目开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值