|
Posted on
2010-08-20 00:04
KurtWang
阅读( 361)
评论()
编辑
收藏
举报
- 泛型算法从不执行容器操作,只是单独的依赖迭代器和迭代器操作实现,算法从不直接添加和删除元素(算法可以通过插入器(inserter)执行插入,对插入器赋值即可插入)。
- 只读算法:
- find(begin, end, search_value);
- accumulate(begin, end, 初值)
- find_first_of(begin1, end1, begin2, end2):在begin1和end1之中找begin2和end2之中的任意元素匹配的元素,返回迭代器,指向第一个匹配的元素,否则返回第一个范围的end。每对迭代器必须精确匹配,两对迭代器之间不需要类型匹配。
- 写容器元素的算法:
- fill(begin,end,value);
- fill_n(begin,num,value):不考虑当前容器大小
- 解决办法:back_inserter。 fill_n(back_inserter(vec),10,0);
- copy(vec.begin(),vec.end(),back_inserter(vec)); 效率低,不如作为新构造容器
- 对容器元素重新排序的算法
- unique(begin,end): 返回一个迭代器,该迭代器指向重复的元素
-
- sort(begin,end), stable_sort(begin,end,func):func是比较函数,可以是默认的比较函数
- count_if(begin, end, func),func返回bool,判断函数
- 插入迭代器:
- front_inserter: 类似于back_inserter,使用push_front插入
- back_inserter: 使用push_back插入
- inserter: 使用insert完成操作,参数1为容器,参数2为指向插入起始位置的迭代器
- 反向迭代器:rbegin(), rend(),支持自增自减
- 五种迭代器
- 输入迭代器:读,不能写,只支持自增
- 输出迭代器:写,不能写,只支持自增
- 前向迭代器:读和写,只支持自增
- 双向迭代器:读和写,支持自增和自减
- 随机访问迭代器:读和写,支持完整迭代器算术
- map,set,list 提供双向迭代器。
- 但map和set的键是const对象,所以不能使用任何写序列的算法,更像支持自减运算的输入迭代器
- map,set,list不能使用需要随机访问迭代器的算法,如sort及其相关的算法
- string vector deque定义随机访问迭代器
- istream_iterator:输入迭代器
- ostream_iterator: 输出迭代器
- List特有的操作
- lst.merge(lst2), lst.merge(lst2,comp):两个list必须排序,lst2的将被删除,前者默认使用<,后者使用comp函数判断大小
- lst.remove(value), lst.remove_if(pred)
- lst.reverse()
- lst.sort()
- lst.splice(iter,lst2): 将lst2插入到lst的iter位置
- lst.splice(iter, lst2, iter2): 将lst2的iter元素插入到lst的iter位置,lst和lst2可以相等
- lst.splice(iter,beg,end):将begin和end之间的元素插入到iter前
- lst.unique(), lst.unique(pred):调用erase删除连续副本
|