c++中迭代器与几种简单的算法
来源:互联网 发布:linux 重启机器 编辑:程序博客网 时间:2024/05/16 08:09
- 从语言的层次:
容器Container是个class template;
算法Algorithm是个function template;
迭代器Iterator是个class template;
仿函数Function是个class template;
适配器Adapter是个class template;
分配器Allocator是个clsaa template;
Algorithm看不见Containers,对其一无所知;所以,它所需要的一些信息都必须从Iterators取得,而Iterators(由Containers供应)必须能够回答Algorithm的所有提问,才能搭配该Algorithm的所有操作。
//STL库中算法的形式template<typename Iterator>Algorithm(Iterator itr1,Iterator itr2){}//或template<typename Iterator,template Cmp>Algorithm(Iterator itr1,Iterator itr2,Cmp comp){}
- 迭代器的分类
各种容器的iterators的iterator_category有:
//五种iterator categorystruct input_iterator_tag{};struct output_iterator_tag{};struct forword_iterator_tag:public input_iterator_tag{};struct bidirectional_iterator_tag:public forward_iterator_tag{};struct random_access_iterator_tag:public bidirectional_iterator_tag{};
- iterator_category对算法的影响:主要体现在执行的效率。
- iterator_category和type traits对算法的影响:
- iterator traits和type traits对算法的影响:
C++ 中算法
简单提一下C++STL库中的几种简单的算法:- accumulate,如下:
template<class InputIterator,class T>T accumulate(InputIterator first, InputIterator last, T init){ for (;first != last;++first) init = init + *first; return init;}//通常算法有两个版本template<class InputIterator,class T,class BinaryOperation>T accumulate(InputIterator first, InputIterator last, T init, BinaryOperation binary_op){ for (;first != last;++first) init = binary_op(init, *first); return init;}
- 算法 for_each:既在一段范围内对每一个元素做一件制定的事情(形式如下)
template<class InputIterator, class Function>T for_each(InputIterator first, InputIterator last, Function f){ for (;first != last;++first) f(*first); return f;}
3.算法replace,replace_if,replace_copy这里简单的写了一个replace算法的代码:
template<class InputIterator, class T>T replace(InputIterator first, InputIterator last, const T& old_value, const T& new_value){ for (;first != last;++first) if (*first == old_value) *first = new_value;}
4.算法count,count_if
template<class InputIterator, class T>typename iterator_traits<InputIterator>::difference_typecount(InputIterator first, InputIterator last, const T& value){ typename iterator_traits<InputIterator>::difference_type n = 0; for (;first != last;++first) if (*first == value) ++n; return n;}
5.算法find,find_if
template<class InputIterator, class T>find(InputIterator first, InputIterator last, const T& value){ while (first != last&&*first != value) ++first; return first;}
注意:容器array、vector、list、forward_list、deque而言他们自身是不带成员函数count()、find()的;但是容器set/multiset、map/multimap、unordered_set/unordered_multiset、unordered_map/unorderd_multimap而言他们自身的成员函数中带有count()、find()。
注意:容器list、forward_list的成员函数中带有sort()。
阅读全文
0 0
- c++中迭代器与几种简单的算法
- C语言几种简单的算法实现
- C语言几种简单的算法实现2
- 数据结构与算法--几种排序的实现(C++)
- 几种压缩算法的简单比较
- 几种简单的排序算法
- 几种简单的图像缩放算法
- 二叉树的几种简单算法
- 几种简单的排序算法
- 查找的几种简单算法
- 几种简单的排序算法
- 简单的几种排序算法源码
- 几种简单的排序算法
- 几种简单的排序算法
- 几种排序算法的简单总结
- 几种简单的随机数算法
- 几种简单的排序算法
- 几种简单的排序算法
- git 上传本地项目问题
- 配置压实策略(二)
- Eclipse中创建的java文件使用命令行运行出错
- 视频直播质量的评测和实现分享
- Bootstrap4(十一)
- c++中迭代器与几种简单的算法
- CentOS7环境下安装RabbitMQ
- type Signature refers to the missing type String
- Bootstrap4(十二)
- 博客第一天*有梦想谁都了不起
- 【BZOJ2440】[中山市选2011]完全平方数
- bzoj 5004: 开锁魔法II
- 剑指offer 编程题(13):链表遍历
- 关于android的OOM和内存溢出的出现与避免简单总结