C++ STL 算法

STL中所谓算法是用来处理容器的非成员函数,有两个通用部分:

1.模板:提供数据的泛型

2.迭代器:提供访问容器值的通用表示

STL算法种类:

1.非修改式序列操作,find(),for_each()

2.修改式序列操作,transform(),random_shuffle(),copy()

3.排序和相关操作,sort()

4.通用数字运算

前3种在头文件algorithm中,最后一种在头文件numeric中

就地算法:结果放在原始数据的位置,例如sort

复制算法:将结果发送到其他位置,例如copy

很多算法有两个版本,STL规定,以_copy结尾的是复制版本,复制版本返回一个迭代器,指向最后一次复制的值的后面一个位置,例如对于replace算法:

/* 将old用new替换,同时读写,所以至少是正向迭代器 */
template<typename ForwardIterator, typename T>
void replace(ForwardIterator first, ForwardIterator last, 
        const T & old, const T & new);

/* 复制到另一个地址,所以区分输入迭代器和输出迭代器,注意返回值 */
template<typename InputIterator, typename OutputIterator, typename T>
OutputIterator replace_copy(InputIterator first, InputIterator last,
        OutputIterator result, const T & old, const T & new);

_if后缀:有些算法根据提供的函数符对容器元素进行操作的结果来执行操作,例如replace_if,如下:

/* Predicate是一元谓词,这里对旧值应用这个谓词,若返回true,那么替换成新值 */
template<typename ForwardIterator, typename Predicate, typename T>
void remove_if(ForwardIterator first, ForwardIterator last, Predicate pred,
        const T & new_value);

next_permutation()算法:提供唯一的排列组合,顺序是字典序

算法和容器的成员函数:应该尽量使用容器的成员函数,两个原因:

1.成员函数对特定容器性能好

2.成员函数有权力管理容器的内存,可以动态管理大小

使用算法的场景:混合容器,例如将vector容器存储到链表或集合中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值