c++Primer,十一,泛型算法
来源:互联网 发布:java输入字符串语句 编辑:程序博客网 时间:2024/05/01 21:35
第十一章 泛型算法
在前面学习完容器和迭代器之后,发现容器提供的操作并不是很多,当然也够用了。标准库容器定义的操作非常少。标准库没有给容器添加大量的功能函数,而是选择提供一组算法,这些算法大都不依赖特定的容器类型,是“泛型”的,可作用在不同类型的容器和不同类型的元素上。
泛型算法:因为它们实现共同的操作,所以称之为“算法”;而“泛型”指的是它们可以操作在多种容器类型上——不但可作用于 vector 或 list 这些标准库类型,还可用在内置数组类型、甚至其他类型的序列上。这里说泛型算法,大多数是和容器相关的,所以应该说是我们平常说的算法(像八皇后算法,深度优先算法。。)的特殊用子集。。。。
举个例子好了:
vector<int> vec;
int search_value = 42;
vector<int>::const_iterator result =find(vec.begin(), vec.end(), search_value);
cout<<*result;
甚至可以作用到数组上:
int ia[6] = {27, 210, 12, 47, 109, 83};
int search_value = 83;
int *result = find(ia, ia + 6, search_value);
//****************************************************************************************
每个泛型算法的实现都独立于单独的容器。这些算法还是大而不全的,并且不依赖于容器存储的元素类型。算法是基于迭代器及其操作实现的,而不是基于容器操作,,所以说,算法约束:我们要知道所操纵的范围,用迭代器指出,迭代器的++可以访问下一个元素。。。算法不直接添加或删除元素,即,算法不改变原容器大小,最多改变值或者改变顺序。
初窥算法:理解算法的最基本方法是了解该算法是否读元素、写元素或者对元素进行重新排序。以下是书本中介绍的内容,具体使用实例,就不罗列了。
只读算法:find.....
写元素算法:fill,fill_n,copy.......
重新排序算法:sort,unique...
着重说下unique,它的功能是去除重复项,假设原数据元素是{3,6,4,8,3,4},使用unique算法后,数据内容变为{3,6,4,8,3,4},并返回指向8后面的3的一个迭代器(无重复序列末尾的下一个位置),然后可以使用容器自带的删除元素操作,来删除后面的数据{3,4},就完成了删除重复项的工作。
另外还可以自定义使用函数,就是让算法按照自己的比较方式来判断是否满足条件,本章关于这点还引出了函数类的概念,后面想学多点的话,可以了解下。
再谈迭代器:前面强调标准库所定义的迭代器不依赖于特定的容器。事实上,C++ 语言还提供了另外三种迭代器:插入迭代器,iostream迭代器,反向迭代器。这些等用到了再看吧。。。实在是烦。。。
注:尽管 map 和 set 类型提供双向迭代器,但关联容器只能使用算法的一个子集。问题在于:关联容器的键是 const 对象。因此,关联容器不能使用任何写序列元素的算法。只能使用与关联容器绑在一起的迭代器来提供用于读操作的实参。
额,大概算法就是拿来用的吧,如果想深究,看源码吧。。不过这里想起来上次疑惑的迭代器失效问题,是不是可以这么安慰自己:容器的元素可以用迭代器指向它,通过迭代器来得到,如果容器的内存是连续的,自然可以++来遍历,如果不是的呢,那么是不是可以重载++,设法使它可以得到下个元素的地址,这样对外表现就很自然了,当迭代器指向的数据被删除时,这个元素没有了,于是得不到它的下个地址了,所以失效了。。。这都是杜撰。。懒人就是这样,想当然,不知道去分析源码。。。唉,怎么能长进。。。另外值得一提的是,算法是类似于c语言的函数式编程方式,不是面向对象的编程方式,也就是说,到目前位置,我们一直是在讨论better C,而不是 C with class。好了,下面会学习类,一种自定义类型,用来丰富c语言的数据类型,进而实现面向对象的程序设计技术。
- c++Primer,十一,泛型算法
- C++primer(十一)泛型算法
- 《C++primer》 泛型算法
- C++primer U11 读书笔记 泛型算法
- C++primer学习:泛型算法(1)
- c++primer学习:泛型算法(2)
- C++primer学习:泛型算法(3)
- C++primer--泛型算法初识
- C++primer阅读笔记---------泛型算法
- C++Primer读书笔记(十一)
- [C/C++] 第11章 泛型算法 Primer
- C++Primer笔记——泛型算法
- 【足迹C++primer】30、概述(泛型算法)
- 【足迹C++primer】31、初识泛型算法
- 【足迹C++primer】34、泛型算法结构
- 【C++primer学习笔记】第11章 泛型算法
- C++primer(第五版)第十章 泛型算法
- C++Primer学习笔记(11)泛型算法
- android 之手机客户端登陆
- 根据Request获取客户端IP
- 例题3.5 易爆物 UVa1160
- 【算法杂谈】算法竞赛中数论相关
- 浅谈JAVA的线程安全与性能之间的权衡
- c++Primer,十一,泛型算法
- jQuery笔记
- 二叉树转化成双向链表
- 2015年阿里巴巴校招研发工程师编程题
- java判断生日字符串是否合法
- 数据结构与算法(C语言)<绪论>
- 膆莇莁袅蝿膃芀袈袅节薂袀
- 袂羁节螀肈芀芁薀袀芆芀蚂
- cmd命令看硬盘的分区信息