《C++primer》 泛型算法

泛型算法(generic algorithm)是为了实现对容器元素的多种操作而设计的。

算法永不执行容器提供的操作:泛型算法本身从不执行容器操作,只是单独依赖迭代器和迭代器操作实现。

对于写容器元素的算法,必须确保算法所写的序列至少足以存储要写入的元素。

对于不检查写入操作的算法,需要弄清楚操作是否合法哦。也可以引入back_inserter,相当于在vec上调用push_back

目标迭代器指向存放输出数据的序列中第一个元素

有些算法提供所谓的“复制(copying)”版本。这些算法对输入序列的元素做出处理,但不修改原来的元素,而是创建一个新序列存储元素的处理结果。

标准库所定义的迭代器不依赖于特定的容器。

C++中定义的另外三种迭代器:插入迭代器(insert iterator),iostream迭代器(iostream iterator),反向迭代器(reverse iterator)

插入迭代器:1.back_inserter,创建使用push_back实现插入的迭代器

                        2.front_inserter,使用push_front实现插入

                        3.inserter,使用insert实现指定位置的插入操作

iostream类型虽不是容器,可标准库提供了迭代器istream_iterator用于读取输入流,ostream_iterator用于写输出流。

反向迭代器是一种反向遍历容器的迭代器。它提供了自增(自减)的操作,不过都是反过来的。

const迭代器不能用来容器中的元素

根据功能将迭代器操作分别五种

输入迭代器读,不能写:只支持自增运算
输出迭代器写,不能读:只支持自增运算
前向迭代器读和写:只支持自增运算
双向迭代器读和写:支持自增和自减运算
随机访问迭代器读和写:支持完整的迭代器算术运算
尽管map和set类型提供双向迭代器,但关联容器只能使用算法的一个子集。问题在于:关联容器的键是const对象,因此,关联容器不能使用任何写序列元素的算法,只能使用与关联容器绑在一起的迭代器来提供用于读操作的实参。

泛型算法的形式有:

alg(beg,end,other parms);

alg(beg,end,dest,other parms);

alg(beg,end,beg2,other parms);

alg(beg,end,beg2,end2,other parms);

标准库的命名和重载规范包括两种重要模式:第一种模式包括测试输入范围内元素的算法,第二种模式则应用于对输入范围内元素重新排序的算法。

list容器上的迭代器是双向而非随机访问的。有很多需要随机访问迭代器的算法不能在list上使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值