C++深入学习笔记(21)—— 算法为什么不改变容器的大小?

泛型算法通过迭代器实现对多种数据类型的处理,使得算法与具体容器解耦。迭代器作为桥梁,仅允许算法读取、修改和移动序列元素,但不直接负责元素的增删。插入迭代器则允许对容器进行添加和删除操作。例如,`fill_n`算法在空容器上使用时会失败,因为算法不具备添加元素的能力,需要插入迭代器配合完成。
摘要由CSDN通过智能技术生成

  泛型算法的的一大优点是“泛型”,也就是一个算法可以用于多个不同类型的数据类型,这也是STL的核心——算法与所操作的数据结构分离。

  我们知道,迭代器的功能之一便是为算法进行服务,那么它是如何服务于算法的呢?要做到数据结构与算法分离,重要的技术手段就是使用迭代器作为两者之间的桥梁。可以说,算法根本就不知道有容器这个东西存在,它从来不对容器进行任何操作,只是对通过迭代器传输进来的一段序列进行处理,因此它从来不与特定的容器所绑定,从而实现了泛型。每个容器都有自己特定的迭代器,但是对于算法来说,既然是泛型算法,那么也是用模板来进行的,因此他可以容下不同类型的迭代器。

  算法只能通过迭代器来访问到特定范围内的序列,因此它只能对这些序列的元素进行读取、改变、移动,但是无法对其进行增添与删除。但是,我们可以通过插入迭代器来对容器进行增删的操作,这并不与上面所讲的有冲突。算法将传输进来的序列经过处理后交给插入迭代器,算法的工作便完成了,接下来插入迭代器通过调用一些底层的操作来实现对容器的增删,这是迭代器的工作而不是算法的工作。因此,能不能对容器进行插入和删除的操作,不在于算法,而在于传递给它的迭代器是否有这样的能力。

  接下来我们看一个例子

vector<int> ivec;
ivec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值