阅读背景:

C++标准泛型算法库的函数为什么设计成不能改变容器大小?

来源:互联网 

        相信蔡老师应该是看了Primer之后产生的这样的疑问,但首先注意的是C++泛型算法的操作对象从来就不是容器,更别提为什么不能改变容器的大小。泛型算法,无论是只读的(比如find,accumulate)还是可写的(sort,fill),其输入参数都是迭代器,也就是说泛型算法眼中只有迭代器,它是看不到容器的。泛型算法有什么样的特性取决于给它提供的迭代器有什么能力。迭代器按照能力大小可分为输入/输出迭代器、向前迭代器、双向迭代器、随机访问迭代器。这些迭代器能力由低到高,高能力迭代器能够实现低能力迭代器的所有功能。那为什么不将泛型算法直接作用于容器呢?泛型算法,顾名思义,就是一种高层算法,它将各种容器和它们的操作进行了隔离,通过抽象出迭代器这一概念,实现了对所有容器的统一操作。比如array、deque、string、vector这些容器都提供了最高能力的随机迭代器,所以可以对它们进行统一的sort算法,如果没有迭代器这一中间层,算法一定会与底层容器耦合,这就失去了泛型算法的意义,也就是说必须要为每种容器设计独立的算法。现在可以大致确定,迭代器这一概念的重要性,所以我们可以理解泛型算法不能直接改变容器大小,但是如果容器提供的迭代器的能力足够,是可以间接改变大小的。比如:        相信蔡老师应该是看了Primer之后产生的这样的疑问,但首先注意的是C++泛型算法


你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: