STL是一种标准,也就是说对所有的编译器来说,提供给C++程序设计者的接口都是一样的。也就是说同一段STL代码在不同编译器和操作系统平台上运行的结果都是相同的,但是底层实现可以是不同的。
为什么我们需要学习STL
- STL是 C++的ANSI/ISO 标准的一部分,可以用于所有C++语言编译器和所有平台(Windows/Unix/Linux..)。STL的同一版本在任意硬件配置下都是可用的;
- STL 提供了大量的可复用软件组织。例如,程序员再也不用自己设计排序,搜索算法了,这些都已经是STL的一部分了。嘎嘎,有意思吧;
- 使用STL 的应用程序保证了得到的实现在处理速度和内存利用方面都是高效的,因为STL设计者们已经为我们考虑好了;
- 使用STL编写的代码更容易修改和阅读,这是当然的鸟。因为代码更短了,很多基础工作代码已经被组件化了;
- 使用简单,虽然内部实现很复杂;
STL 的组成
STL有三大核心部分:容器(Container)、算法(Algorithms)、迭代器(Iterator),容器适配器(container adaptor),函数对象(functor),除此之外还有STL其他标准组件。
- 容器:装东西的东西,装水的杯子,装咸水的大海,装人的教室……STL里的容器是可容纳一些数据的模板类;
- 算法:就是往杯子里倒水,往大海里排污,从教室里撵人……STL里的算法,就是处理容器里面数据的方法,操作;
- 迭代器:往杯子里倒水的水壶,排污的管道,撵人的那个物业管理人员……STL里的迭代器:遍历容器中数据的对象;
- 容器(container):容器是数据在内存中组织的方法,例如,数组、堆栈、队列、链表或二叉树(不过这些都不是STL标准容器)。STL中的容器是一种存储T(Template)类型值的有限集合的数据结构,容器的内部实现一般是类。这些值可以是对象本身,如果数据类型T代表的是Class的话。
- 算法(algorithm):算法是应用在容器上以各种方法处理其内容的行为或功能。例如,有对容器内容排序、复制、检索和合并的算法。在STL中,算法是由模板函数表现的。这些函数不是容器类的成员函数。相反,它们是独立的函数。令人吃惊的特点之一就是其算法如此通用。不仅可以将其用于STL容器,而且可以用于普通的C++数组或任何其他应用程序指定的容器。
- 迭代器(iterator):一旦选定一种容器类型和数据行为(算法),那么剩下唯一要他做的就是用迭代器使其相互作用。可以把达代器看作一个指向容器中元素的普通指针。可以如递增一个指针那样递增迭代器,使其依次指向容器中每一个后继的元素。迭代器是STL的一个关键部分,因为它将算法和容器连在一起。
顺序容器:
vector容器:
push_back(),在向量末尾添加数据;
pop_back(),删除向量中的最后一个元素;
erase():删除指定的元素;
clear():清空整个向量;
insert():在某位置后插入一个元素;
front():返回向量的第一个元素;
deque双向队列:
size():返回元素个数;
push_back(),在向量末尾添加数据;
push_front(),在向量首端添加数据;
pop_back(),pop_front()
list列表容器:
remove():删除某具体元素;
begin(),end(),size(),front(),back(),insert()
栈适配器stack<T>:
push():在栈顶插入一个元素;
pop():从栈顶删除一个元素;
top():取栈顶元素引用;
size():栈的元素个数;
empty():栈是否为空;
队列适配器queue<T>:
push():在队尾插入一个元素;
pop():从队首删除一个元素;
top():取第一个元素引用;
back():取最后一个元素引用;
size():队列的元素个数;
empty():队列是否为空;