C++ STL标准模板库 notes

STL的从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),容器和算法通过迭代器可以进行无缝地连接。几乎所有的代码都采 用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文 件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack> 和<utility>。

container(容器):

理论提高:所有容器提供的都是值(value)语意,而非引用(reference)语意。容器执行插入元素的操作时,内部实施拷贝动作。所以STL容器内存储的元素必须能够被拷贝(必须提供拷贝构造函数)。

iterator(迭代器):

迭代器从作用上来说是最基本的部分,可是理解起来比前两者都要费力一些。软件设计有一个基本原则,所有的问题都可以通过引进一个间接层来简化, 这种简化在STL中就是用迭代器来完成的。概括来说,迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎STL提供的所有算法都是通 过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
迭代器部分主要由头文件<utility>,<iterator>和<memory>组 成。<utility>是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,<iterator>中提供了迭代器 使用的许多方法,而对于<memory>的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生 的临时对象提供机制,<memory>中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。

algorithm(算法):

操作对象
     直接改变容器的内容
     将原容器的内容复制一份,修改其副本,然后传回该副本
功能: 
非可变序列算法 指不直接修改其所操作的容器内容的算法
     计数算法  count、count_if
      搜索算法  search、find、find_if、find_first_of、…
      比较算法  equal、mismatch、lexicographical_compare
可变序列算法 指可以修改它们所操作的容器内容的算法
      删除算法  remove、remove_if、remove_copy、…
      修改算法  for_each、transform
      排序算法  sort、stable_sort、partial_sort、
排序算法 包括对序列进行排序和合并的算法、搜索算法以及有序序列上的集合操作
数值算法 对容器内容进行数值计算

猜你喜欢

转载自blog.csdn.net/costeeer/article/details/81505850