第十一章:泛型算法

1:算法

find,count:读算法,头文件algorithm;

copy, replace,replace_copy:写算法,头文件algorithm;

find_first_of,accumulate:读算法,头文件numeric;

fill,fill_n:写算法,头文件xutility;

back_inserter:写算法,头文件iterator;

2:算法不改变容器的大小,真理在于让算法独立于容器,而达到普遍性,泛性,使得设计更为简单

3: 理解下面程序代码:

istream_iterator<int> in_iter(cin); // read ints from cin
  istream_iterator<int> eof; // istream "end" iterator
     // read until end of file, storing what was read in vec
  while (in_iter != eof)
             // increment advances the stream to the next value
             // dereference reads next value from the istream
        vec.push_back(*in_iter++);

对于istream_iterator<int> in_iter(cin); 表示构建了一个流输入迭代器,且通过cin将该迭代器已经准备好了,只要解引用则就可以将输入数据获取到返回来。比如此时用*in_iter时会将流中第一个元素输入其中;但是留意的是*in_iter是获取流中数据返回其值;若在解引用时发现流中没有数据,自然会告诉流,让流提示客户输入数据。

对于*in_iter++操作,其实质是*in_iter ;in_iter++;而在定义流迭代器时,就已经准备好一个数据待接收了;故而在*in_iter提示接收数据,而在in_iter++还会提示接收数据,因为迭代器指向此流时没有数据。验证:int c=*in_iter;in_iter++;c=*in_iter;第一个会提示输入,是因为in_iter迭代器指向的流没有数据需要输入;而第二将迭代器转下一个时,发现没有任何数据对应,故而提示客户输入数据;而在第3个语句时,由于只是解引用,而此处的迭代器所指流是有数据的,故而不需要提示输入了。

其整个过程实质是指:定义迭代器时,已经有输入了,只是由于是定义,且没有使用其中数据,故而没有提示;因此第一个解引用就会提示输入;后面的只要迭代器指向下个,则就该填入所指处的值,故而需要提示输入。

对于*in_iter++操作过程还得考虑优先级问题,是先运行in_iter++;后运行*in_iter;因此,假设输入1 2 ;则先将1收入,且移动后将2也收入了,而*in_iter是将第一个迭代器解引用了,故而可以获取其中的值;但是到下一次循环时,in_iter++则由于没有数据了,故而需要提示输入,则只有输入了,才会*in_iter获得2值;故而输入是1 2 \n ctl+z \n 输出才会是1 2;

1 2

1--获取1

ctl+z

2--获取2

明显语句:

istream_iterator<int> itin(cin);
istream_iterator<int> itin1(cin);
istream_iterator<int> eof;
 while(itin!=eof)
{
ivec.push_back(*itin);
itin++;
}

可以看到输入是1 2 3 时,只是获得了1 3 ,因为2 已经被itin1获取了。

4:对于list对象,应该优先使用list容器特有的成员版本,而不是泛型算法。

时间: 2024-10-25 00:51:23

第十一章:泛型算法的相关文章

第十一章 泛型算法 C++ PRIMER

vector<int>::const_iterator result = find(vector.begin(). vector.end(),search_value); 如果查找失败,分会end()  如果有两个,会返回哪一个的迭代器? int *reauslt = find(ia,ia+6,search_value); 也可以同样处理字符串 算法要以<algorithm><numeric>,依赖于迭代器和迭代器的算法实现,算法可能改变值,可能移动元素,单从不直接添加

C++primer第十一章 泛型算法

标准库容器定义的操作非常少.标准库没有给容器添加大量的功能函数,而是选择提供一组算法,这些算法大都不依赖特定的容器类型,是“泛型”的,可作用在不同类型的容器和不同类型的元素上. 因为它们实现共同的操作,所以称之为“算法”:而“泛型”指的是它们可以操作在多种容器类型上——不但可作用于 vector 或 list 这些标准库类型,还可用在内置数组类型.甚至其他类型的序列上. 11.1. 概述 假设有一个 int 的 vector 对象,名为 vec,我们想知道其中包含某个特定值.解决这个问题最简单的

C++ Primer 读书笔记:第11章 泛型算法

第11章 泛型算法 1.概述 泛型算法依赖于迭代器,而不是依赖容器,需要指定作用的区间,即[开始,结束),表示的区间,如上所示 此外还需要元素是可比的,如果元素本身是不可比的,那么可以自己定义比较函数. 2.常用的泛型算法函数: fill,fill_n, copy, replace, sort, unique, count_if, stable_sort 此外在有一个谓词函数会结合以上的函数使用,像sort, count_if等 3.再谈迭代器 (1)插入迭代器 back_inserter, f

第十一章 执行查询算法

第十一章      执行查询算法 基本概念: 三类查找方法:线性查找.树形查找.哈希表查找 动态查找表:在查找的同时,对表做修改操作(如插入和删除),则相应的表称为动态查找表 静态查找表:与动态查找表相反 查找过程中对关键字需要执行的平均比较次数(也称平均比较长度作为衡量一个查找算法优劣的标准 平均比较长度: 其中:n是结点的个数:pi是查找第i个结点的概率.若不特别申明,认为每个结点的查找概率相等,都为1/n:ci是找到第i个结点所需进行的比较次数. 线性查找: 基本思想:从表的一端开始,顺序

C++ Primer学习总结 第10章 泛型算法

第10章 泛型算法 1.    find()泛型算法使用示例: 2.    只读算法accumulate:对所给范围的元素求和并返回. 注意accumulate的第3个参数决定着它的返回类型. 即如果第3个参数是double,就算迭代器里都是int,最终还是返回double类型的数. 3.    只读算法equal:比较前两个迭代器表示范围的所有元素是否与第3个迭代器表示的对应位置的元素都相同,如果相同返回true.两个容器类型可以不同,保存的元素类型也可以不同,只要元素之间可以比较即可.如st

第二十一章 泛型(generic)

(1)引言 泛型:是指参数化类型的能力. 例如:有这样一个类:这是一个比较简单并且是很常用的带有泛型的方法. package com.lidd.generic; public class GenericTestSecond { public <T>void one(T t){ } } 下面是几个类,分别是一般类.抽象类.接口(接口也是特殊的类). package com.lidd.generic; public class A { } package com.lidd.generic; pub

《C++primer》v5 第10章 泛型算法 读书笔记 习题答案

10.1 using namespace std; int main() { vector<int> vec; int a; cin>>a; int v; while(cin>>v) vec.push_back(v); cout<<a<<" : "<<count(vec.begin(),vec.end(),a)<<endl; return 0; } 10.2 using namespace std; i

算法导论笔记——第十~十一章 数据结构(一) 散列

第十章 基本数据结构 栈:可由数组表示 队列:可由数组表示 指针和对象:可由多数组表示.可用栈表示free list 有根数: 二叉树:左右孩子 分支无限制:左孩子右兄弟表示法 第十一章 散列表 数组:为每个元素保留一个位置 散列表:用于实际存储关键字比全部可能关键字少很多时,比如字典操作 解决散列冲突:链接法,开放寻址法 11.2 散列表 用链表法,在简单均匀散列的假设下,一次成功或不成功的查找所需要的平均时间为Θ(1+α),α为load factor. 11.3 散列函数 好的散列函数应(近

JavaScript DOM编程艺术-学习笔记(第十章、第十一章)

第十章 1.动画中,因为js的效率高,所以看不见过渡效果 2.题外话:①国外人写书,总是先感谢一遍亲朋好友,最后感谢自己的家人. 3."除非允许用户'冻结'移动的内容,否则应该避免让内容在页面中移动" 4.动画经常遇到的问题:鼠标来回移动,则动画就会出问题. 原因:队列事件积累. 解决:判断,如果此时有动画,则清空队列. 5.小知识点:①ceil 向上取整 ②floor 向下取整 ③round 取最近的整数 第十一章 1."html5 问世背后的明争暗斗就像是一步韩国肥皂剧&