C++必知必会(四) STL
对STL(Standard Template Library)的简短描写并不敷以浮现其设计上的过人之处,接下来的文字不外是勉励你深入进修STL的“开胃小菜”。
STL并不只仅是一个库,它更是一种优秀的思想以及一套约定。 STL包括三大组件:容器、算法和迭代器。容器用于容纳和组织元素;算法执行操纵;迭代器则用于会见容器中的元素。这些都不是什么新对象,很多传统的措施库也都包括雷同的组件,而且很多措施也都是回收模板实现而成。
STL的优秀思想在于:容器与容器上执行的算法之间无需互相相识,这种戏法是通过迭代器实现的。 迭代器雷同于指针(实际上指针就是一种STL迭代器)。像指针一样,迭代器可以指向序列中的一个元素,也可以对其举办解引用,以便得到它所指向的工具的值。我们可以像哄骗指针那样哄骗迭代器,使其指向序列中差异的元素。
STL迭代器既可以是预界说的指针,也可以是用户自界说的类范例,虽然,这种范例需要重载适当的操纵符,以便与预界说指针拥有沟通的利用语法。
STL容器是对数据布局的一种抽象,以类模板的方法实现而成。由于具有差异的数据布局,因此差异的容器以差异的方法来组织元素,以便对存取或哄骗举办优化。STL界说了7个(算上string则是8个)尺度容器,别的,一些被遍及接管的非尺度容器也获得了实现。
STL算法是对函数的一种抽象,回收函数模板实现。大大都STL算法用于处理惩罚一个或多个序列的值,个中每一个序列由一对有序的迭代器界说。个中第一个迭代器指向序列的第一个元素,第二个迭代器则指向序列最后一个元素之后的谁人位置。假如两个迭代器指向同一个位置,那么它们就界说了一个空序列。
迭代器提供了一种使容器和算法协同事情的机制。一个容器可以生成一对迭代器来指定一个元素序列(可以是全部元素,也可以只是一个子区间),而算法例对该序罗列办操纵。回收这种方法,容器和算法可以细密地协作,同时还可以保持互相不知情。 除了容器、算法和迭代器之外,STL还界说了大量的帮助性成果。算法和容器可以回收函数指针和函数工具按照需要举办定制,而这些函数工具又可以通过形形色色的工具适配器举办配接和连系。
容器也可以操作容器适配器举办配接,从而将容器的接口修改为栈、行列和优先行列。 STL对约定有着很强的依赖。容器和函数工具必需通过一套尺度的嵌套范例名字对其自身举办描写。容器和函数工具适配器均要求成员函数具有特定的名字并包括特定的范例信息。算法要求通报给它的迭代器支持特定的操纵并可以或许识别是什么样的操纵。当利用或扩展STL时,假如弃约定而掉臂,那么同时也就放弃了好梦成真的但愿。遵守约定,将拥有简朴而轻松的糊口。
STL约定并未指明详细的实现细节,但对实现指定了效率方面的约束。另外,由于STL是一个模板库,很多优化和机能调解可以在编译期举办。前面提到的定名和信息约定对编译期优化具有显著的影响。一般而言,STL的效率可以与专家手写代码的效率相媲美,而与普通措施员和措施员小组的手写代码对比则明明胜出一筹。别的,利用STL可以使代码变得更清晰,更易于维护。 进修STL,并遍及利用STL吧!