6.1算法概观
1)算法总览
2)质变算法
所有的STL算法都作用在又迭代器[first,lasr)所标示出来的区间上。所谓质变算法,是指运算过程中会更改区间内(迭代器所指)的元素内容。如拷贝(copy)、互换(swap),替换(replace)等。通常提供两个版本,一个是in_place(就地进行)版,就地改变其操作对象;另一个是copy(另地进行)版,将操作对象的内容复制一份副本,然后在副本上进行修改并返回该副本。
- 非质变算法
所有的STL算法都作用在又迭代器[first,lasr)所标示出来的区间上。所谓非质变算法,是指运算过程中不会更改区间内(迭代器所指)的元素内容。如查找(find)、匹配(search)、计数(count)、巡访(for_each)等。
6.2算法的泛化过程
泛化:把操作对象的型别加以抽象化,把操作对象的标示法和区间目标的移动行为抽象化,整个算法也就在一个抽象层面上工作了。整个过程称为算法的泛型化(generalized),简称泛化。
如:完全泛型化的find()函数
template<class Iterator, class T>
iterator find(Iterator begin, Iterator end, const T& value){
While( begin != end && *begin != value){
++begin;}
return begin; }
6.4基本算法
1)运用实例
2)解释
- copy-强化效率无所不有其极
6.5 set算法
1)运用实例
2)解释
并集
交集
差集
对称差集
6.6 heap算法
1)单纯的数据处理
6.7 其他算法
2)lower_bound (应用于有序区间)
寻找[first ,last)中第一个大于等于(>=)value值元素出现的位置。即它返回一个迭代器,指向第一个“不小于value”的元素
3)upper_bound(应用于有序区间)
该算法是二分查找法的一个版本,寻找[first ,last)中第一个大于value的元素的位置。更确切地说,它会返回“在不破坏顺序的情况下,可插入value的最后一个合适位置”。
4)binary_search(应用于有序区间)
5)next_permutation 下一个排列组合
6)prev_permutation(前一个排列组合)
7)random_shuffle 随机重排
8)partial_sort/partial_sort_copy
接受一个middle迭代器,然后重新对[first,last)内的元素进行排序。[first,middle)内是递增顺序,[middle,last)顺序不一定。
9)sort (只能在vector和deque上使用)
因为这两个容器才有RandomAccessIterator随机存取迭代器。