STL预习报告
一 STL背景:
众所周知,c语言是一种面向过程的高级语言(Procedure-Oriented),它把做一件事情的过程抽象出procdure(function),过程和功能,将事物的方法隐藏于函数中。因为函数之间相对独立,所以有“强内聚,低耦合”的特点,c语言对小程序即项目非常高效,但随着项目越来越大,程序越写越多,单纯用c语言实现代码量太大,重复代码过多,效率就低了。 为了解决这个问题,c++应运而生,它可以将事物抽象出数据类型,将属性和方法和数据类型抽象结合一起,用这个抽象的类解决实际问题就方便多了,由此派生出来的类的继承和多态,实现了一个接口,多种功能的实现。
但对于大型甚至超大型的项目来说,这还不够,STL提供了复杂数据类型以及算法的封装,使用这些接口,使开发人员更高效方便的处理项目。
二 STL及容器简介
STL(standard templte Library) 即标准模板库,是泛型编程的基础,由六大部分组成:
这六部分最重要的容器和算法,其中迭代器为容器的接口, 容器是一种形象的说法,其实是将一些数据结构做成API接口,方便开发人员调用,开发人员同样可以在其中做一些数据管理,容器其实是用c++中的模板类来实现的。
容器分为序列容器和关联容器,序列容器中每个元素都有固定位置,元素插入取决于时机和地点,和元素值无关,关联式容器中元素位置取决于特定的排序推测,和插入顺序无关。
三 序列式容器
包括 vector, deque, list
Vector(本质为一个可以动态增加和减少空间的动态数组)其特点:
1.可以使用下标访问个别的元素 2.迭代器可以按照不同的方式遍历容器
3.可以在容器的末尾增加或删除元素
和数组相比,虽然容器在自动处理容量的大小时会消耗更多的内存,但是容器能提供和数组一样的性能,而且能很好的调整存储空间大小和其他标准的顺序容器相比(deques or lists),能更有效访问容器内的元素和在末尾添加和删除元素,在其他位置添加和删除元素,vector则不及其他顺序容器,在迭代器和引用也不比lists支持的好
List(本质为双向链表)的特点:
1. 不使用连续的内存空间这样可以随意地进行动态操作。
2.可以在内部任何位置快速地插入或删除,当然也可以在两端进行push 和pop。
3. 不能进行内部的随机访问,即不支持[ ] 操作符和vector.at()。
4.相对于verctor 占用更多的内存。
list是一个线性双向链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据)、一个前驱指针和一个后驱指针。它无需分配指定的内存大小且可以任意伸缩,这是因为它存储
相关推荐: