C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构。是所有平台都支持的一种库。
STL中六大组件:
1)容器(Container),是一种数据结构,如list,vector,和deques ,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器;
2)迭代器(Iterator),提供了访问容器中对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。
3)算法(Algorithm),是用来操作容器中的数据的模板函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象。
4)仿函数(Function object)
5)迭代适配器(Adaptor)
6)空间配制器(allocator)
容器
类别分为两类:
序列式容器:排列次序取决于插入时机和位置
关联式容器:排列顺序取决于特定规则。
容器元素的条件
能够通过拷贝构造函数进行复制
可以通过赋值运算符完成赋值操作
可以通过析构函数完成销毁动作
序列式容器元素的默认构造函数必须可用
某些动作必须定义operator=,例如搜寻操作
关联式容器必须定义出排序准则,默认情况是重载operator<
迭代器(iterator):
1.可遍历STL容器内全部或部分元素的对象
2.指出容器中的一个特定位置
vector迭代器相关函数:
1. begin()返回一个迭代器,指向第一个元素;
2. end()返回一个迭代器,指向最后一个元素末尾;
3. rbegin()返回一个逆向迭代器,指向逆向遍历的第一个元素;
4. rend()返回一个逆向迭代器,指向逆向遍历的最后一个元素;
vector容器的应用:
构造拷贝和析构
vector<int> vec1; //产生空的vector
vector<int> vec2(vec1); //使用vec1初始化vec2
vector<T>c(n);利用类型T的默认构造函数和拷贝构造函数生成一个大小为n的vector
vector<int> c(n,e); 产生一个大小为n的vector,每个元素都是e;
vector<T>c(began,end)产生一个vector,以[began,end]区间为元素初值;
~vector<T>();销毁所有元素并释放内存;
//2.常用操作方法
vec1.push_back(100); //添加元素
int size = vec1.size(); //元素个数
bool isEmpty = vec1.empty(); //判断是否为空
cout<<vec1[0]<<endl; //取得第一个元素
vec1.insert(vec1.end(),5,3); //从vec1.back位置插入个值为的元素
vec1.pop_back(); //删除末尾元素
vec1.erase(vec1.begin(),vec1.end());//删除之间的元素,其他元素前移
cout<<(vec1==vec2)?true:false; //判断是否相等==、!=、>=、<=...
vector<int>::iterator iter = vec1.begin(); //获取迭代器首地址
vec1.clear(); //清空元素
map和multimap
使用平衡二叉树管理元素
元素包含两部分(key,value),key和value可以是任意类型的元素;
必须包含头文件#include<map>;
根据key自动对元素排列;
不能直接改变元素的key;可以通过operator[]直接存取元素值;
map不允许key相同的元素,multimap可以;
简单操作
map c ;产生空的map;
mapc1(c2) 产生同类型的c1并复制c2的所有元素;
map c(op) 以op为准则产生一个新的map;
~map() 销毁所有元素并释放内存;
赋值
c1=c2 将c2的全部元素复制给c1
c1.swap(c2) 将c1和c2的元素互换
swap(c1,c2) 同上,全局函数;
学习心得;熟悉了STL之后,可以更方便的编写程序,许多复杂之处可以被大大的化简,利用STL可以更快速的访问地址。并且STL中包含了许多可以节省空间的操作方法,要让STL在学习程序编程中成为自己的助手