《C++primer(第五版)》学习笔记-第十章:泛型算法

10.1 概述

大多数算法都定义在头文件algorithm中。标准库还在文件numeric中定义了一组数值泛型算法。

一般情况下,算法并不直接操作容器,而是遍历由两个迭代器制定的一个元素范围来进行操作。

需要注意的是:迭代器算法不依赖于容器,但算法依赖于容器类型的操作。

大多数算法提供了一种方法,允许我们使用自定义的操作来代替默认的操作符。

泛型算法本身不会执行容器的操作,它们只会运行于迭代器之上,执行迭代器的操作。


10.2 初识泛型算法


accumulate:定义在头文件numeric中。作用是对范围求和。

接受三个参数,前两个指出需要求和的元素范围,第三个是求和的初值。

euqal:定义在头文件algorithm中。作用是判断给定两个序列的区间元素是否(对应)相等。

接受三个参数(迭代器),前两个表示第一个序列的元素范围,第三个表示第二个序列的首元素。equal函数假设第二个序列至少与第一个序列一样长;

 equal(vec1.cbegin(),vec1.cend(), vec2.cbegin());

fill:定义在头文件algorithm中。作用是对给定区间全部赋予某值。

fill接受一对迭代器表示一个范围,还接受第三个参数(一个值)。fill将给定的这个值赋予输入序列中的每个元素

 fill(vec.begin(),vec.end(), 0);//将每个元素重置为0;

fill_n:定义在头文件algorithm中。作用是对给定迭代器后的n个元素赋予某值。
接受三个参数,一个单迭代器,一个计数值和一个值;

         fill_n(vec.begin(),5, 0);//将前5个元素重置为0;

back_inserter :定义在头文件iterator中。接受一个指向容器的引用,返回指向容器尾部的迭代器。

back_inserter是一种插入迭代器(insertiterator),是一种向容器中添加元素的迭代器。

 vectorvec; //空向量 

autoit = back_inserter(vec);//通过它赋值,将元素添加到vec中;

*it= 42;//vec中现在有一个元素

copy: 向目的位置迭代器只想的输出序列中的元素写入数据的算法。

接受三个参数(迭代器),前两个表示一个输入范围,第三个表示目的序列的起始位置。// copy的目标序列元素至少等于输入序列的数量;copy返回的是目的迭代器尾元素之后的位置;

replace:读入一个序列,并将其中所有等于给定值的元素都替换为另一个值

接受四个参数,前两个是迭代器,表示输入序列,后两个一个是搜索(待替换)的值,最后一个是新值;

replace_copy: 相对replace,其可以保留原序列不变,重新生成一个新的序列;

接受额外第三个迭代器参数,指出调整后序列的保存位置。也就是接受5个参数。

sort:定义在头文件algorithm中。对指定区间排序。

unique:定义在头文件algorithm中。“消除”重复项,返回指向不重复值范围末尾的迭代器。

erase:定义在头文件algorithm中。删除指定范围内的元素。

你可能感兴趣的:(C++)