- STL标准模板库基本介绍
C++ STL(标准模板库)是惠普实验室开发的一系列软件的统称,是一套功能强大的 C++ 模板类。STL的目的是为了标准化组件,这样就不用重新开发,让后来者可以使用现成的组件,和开源组件有点殊途同归。 STL的版本很多,常见的有HP STL、PJ STL、 SGI STL等,另外,STL库属于C++标准库的一部分,两者是包含关系。
- STL与C++的关系
STL主要包含六大组件,每个组件负责不一样的功能,也涉及到不一样的知识点,其中属容器和算法最为主要,其他组件起到牵线 搭桥的作用,让算法和容器能够融合的更好,更方便使用。
六大组件的交互关系:container(容器) 通过 allocator(配置器) 取得数据储存空间,algorithm(算法)通过 iterator(迭代器)存取 container(容器) 内容,functor(仿函数) 可以协助 algorithm(算法) 完成不同的策略变化,adapter(配接器) 可以修饰或套接 functor(仿函数)。
- STL使用
在程序中用到堆、栈、队列、链表等一些基本的算法,而你又实在不想自己去实现数据结构教科书中那些繁琐的算法,那么你就可以考虑使用STL。STL作为一种标准,便于交流,掌握它,一方面可以让你写的程序,易于让别人理解,另一方面你也能够比较容易地理解别人写的程序。
- 容器
- string
- vector
- list
- set / multiset
- map / multimap
- stack queue /
- priority_queue pair
- STL 算法 <algorithm> sort等
- 迭代器 iterator 、reverse_iterator
- 注意点
- 1.添加相应的头文件(如 #include <list> )( 注意,没有 .h )
- 2.添加std命名空间(用 using namespace std; )
- 3.赋予模板具体的使用类型(如 typedef list<string> LISTSTR; )
- 4.实例化模板(如 LISTSTR test; )
- 5.实例化游标(如 LISTSTR::iterator i; )
- 6.通过迭代器对象访问模板对象,例如
- // 逐个输出链表test中的元素
for ( i = test.begin(); i != test.end(); ++i )
cout << *i << " ";
- 常用函数
- assign() 赋值
- empty() 容器为空则返回非0值
- erase() 删除指定位置或指定范围内的元素
- push_front() 从容器头部插入元素
- push_back() 从容器尾部插入元素
- pop_front() 删除第一个元素
- pop_back() 删除最后一个元素
- back() 返回最后一个元素的引用
- front() 返回第一个元素的引用
- begin() 返回指向第一个元素的游标 (与迭代器配合使用)
- end() 返回指向最后一个元素的后一个位置的游标 (最后1个元素再加1) (与迭代器配合使用)
简单易懂的实例应用在本人github:https://github.com/baobaotql/CCNU_Algorithm/tree/master/PAT/STL