一.什么是STL
STL全称为Standard Template Library,即标准模板库,该库提供一些常用的容器对象和一些通用的算法等,大家可以理解STL就是一个库,该库帮我们封装了很多容器类和通用的方法,我们可以通过调用该库中封装好的方法和容器类来进行编程
二.STL 六大组件
- 容器(Container)
- 算法(Algorithm)
- 迭代器(Iterator)
- 函数对象,又称仿函数(Function object)
- 适配器(Adaptor)
- 空间配置器(Allocator)
本文主要讨论容器组件。
容器
STL中容器可分为序列式容器和关联式容器,其中,序列式容器的每个元素的位置取决于元素被插入时设置的位置,和元素值本身无关,而,关联式容器的元素位置取决于特定的排序规则,和插入顺序无关。意思就说,序列式容器中每个元素的位置与插入的顺序对应,而关联式容器中元素会根据特定的排序规则对每个元素进行排序,与元素插入的顺序无关。
序列式容器包括:vector、list和deque,而关联式容器有:set、multiset、map和multimap
vector适合模拟栈,deque适合模拟队列,list适合模拟链表。
算法
算法是用来操作容器中数据的模板函数,它抽象了对数据结构的操作行为。要使用STL中定义的算法,应首先引入头文件。例如STL中的sort()函数可以对容器中的数据进行排序,可以使用find()函数来搜索容器中的某个元素。
迭代器
STL实现要点是将容器和算法分开,使两者彼此独立。迭代器使两个联系起来,迭代器提供访问容器中的方法。迭代器实质上是一种智能指针,它重载了->和*操作符。事实上,C++指针也是一种迭代器。
四.STL demo
vector
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(void){
int a[]={
1,3,4,6,8,7};
vector<int> arr(a,a+6);
vector<int> ::iterator begin;
/*Initialize a vector*/
cout<<"Initialize vector arr with a:"<<endl;