关于泛型程序设计和c++标准模板库

来源:互联网 发布:karunesh 知乎 编辑:程序博客网 时间:2024/06/03 18:09

1. 泛型程序设计


所谓泛型程序,就是不依赖与某种特定的数据结构的程序。 前面所学的模板,就是泛型程序设计中极其有用的工具。设计的主要思想就是将算法从特定的数据结构里抽象出来。


概念(concept ) - 泛型程序设计中 作为参数的数据类型所具有的功能

模型(model) - 具备一个概念需要的基本数据结构。

如果将概念视为集合来理解子概念,我觉得更容易。 如果B<A,则称B是A的子概念



2. STL

STL - standard template library , C++标准库之一,提供一些常用的算法和数据结构。 (与c相比,这样的开发和复用效率更高,而且因为是标准库,有着相同的接口,也利于使用和阅读代码)


STL有4种组件: 容器(container)、迭代器(iterator)、函数对象(function object)、算法(algorithm)。

在STL里,我们用容器来装东西(数据内容),用迭代器来访问他们,将他们传送到使用到的算法里,而算法的调用在函数对象里完成的。


(1)迭代器

怎们说呢,这个迭代器有点像cpu里的数据通路,在STL里,数据的交流全靠迭代器来完成。当然,迭代器也有些像一个泛型的指针,指针是迭代器,当迭代器不仅仅是指针(在STL里,可以直接对输入输出流操作,这些的实现应该不能简单的用指针来完成)。


输入流、输出流迭代器:从一个输入流、输出流连续的输入输出某种类型的数据

complete<class T>iostream_iterator(T); T有两个条件:有默认构造函数和重载“>>”(输入);

complete<class T>ostream_iterator(T);T有一个条件:重载"<<”

开始的疑问:用这个迭代器有什么好处,比如现在有一堆数据输入,最初的做法是开个循环读,但是迭代器重载了++,*,-,->。你只要迭代器++就可以不停的读


迭代器的分类:输入输出迭代器(这是第一代)-> 前向迭代器 -> 双向迭代器 -> 随机访问迭代器(-> 前者是后者的子概念)

所有迭代器(p)具有的功能:

p++:后置指向迭代器所指的后一个元素,返回类型不确定(??)

++p:前置++指向下一个元素,返回p的自身引用


迭代器的辅助函数 - advance和distance

这两个函数为所有迭代器提供只有随机访问迭代器才有的访问能力:前进或回退多个元素,以及计算距离;


(2) 容器

基本功能: 默认构造S 、S1 op S2(op可以是+,-,> ,< ,= ,>= ,<= , == ,!=)、s.begin()  、 s.end() 、 s.clear() 、s.empty() 、 s.size() 、 s.swap(s1)


容器有两种概念划分:顺序容器和关联容器、容器<可逆容器<随机访问容器

对后者:STL对每个可逆容器提供了逆向迭代器s.rbegin() - 指向最后元素的逆向迭代器 s.rend() - 指向第一个元素前一个位置的逆向迭代器

<vector> <deque> <list> <set> <multiset> <map> <multimap>
   向量       队列       链表   集合    多重集合  映射      多重映射


具体到每个容器的使用,学会查看手册;


0 0
原创粉丝点击