|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 moc 于 2018-9-19 19:25 编辑
1、基本概念
STL(Standard Template Library):是惠普实验室开发的一系列的软件的统称,现在主要出现在C++中,但被引入C++之前该技术就已经存在很长时间。
STL从广义可以分为三类: algorithm(算法)、container(容器)、iterator(迭代器)。
容器和算法通过迭代器可以进行无缝连接,其中所有的代码都采用了类模板和模板函数的方式,这比传统的由函数和类组成的库提供了更好的代码重用。
C++标准中,STL被组织为13个头文件:
<algorithm>、<deque>、<functional>、<iterator>、<vector> 、<list>、<memory>、<map>、<numeric>、<queue>、<set>、<stack>、<utility>。
STL六大组件: -容器(Container) -算法(Algorithm)
-迭代器(Iterator) -仿函数(Function object)
-适配器(Adaptor) -空间适配器(allocator)
使用STL的好处:
① STL为C++的一部分,因此不需要安装什么,他已被内嵌于编译器之内。
② STL的重要的特点:将算法和数据结构分离,这样使得STL变得非常通用。
如:vector容器中可以放基础类型数据,也可以结构体、类、指针等。
STL的sort()函数可以用来操作vector、list等容器。
③ STL已优化和封装得很好,程序员只需熟练使用STL,不需考虑其具体实现过程。
④ STL具有高可重用性<模板技术>、高性能<如map采用红黑数的变体实现>、高移植性、跨平台<可用于Windows、macOS等>系统等优点。
⑤ STL已是C++荣耀的一部分,STL是C++程序的一项不可或缺的基本技能,掌握它对提升C++编程大有裨益,只有熟练使用STL的程序员才是好的C++程序员,需要深入理解在什么情况下使用哪个容器和算法。
2、容器
在实际的开发中,数据结构本身的重要性不亚于数据结构算法的重要性。当程序存在着对时间要求很高的部分时,数据结构的选择尤为重要。STL容器对常用的数据结构提供了支持,这些模板参数允许我们指定容器中的数据类型,可将我们许多重复而乏味的工作得到简化。
1. 容器的概念
用来管理一组元素.
2. 容器的分类
序列式容器(Sequence container):每个元素都有固定的位置—取决于插入的时机和地点和元素值无关。有:vector、deque、list...
关联式容器(Associated container):元素的位置取决于特定的排序准则和插入顺序无关。有:set、multiset、map、multimap...
数据结构 | 描述 | 实现头文件
| 向量(vector) | 连续存储的元素 | <vector>
| 列表(list) | 由结点组成双向链表,每个结点包含一个元素 | <list>
| 双端队列(deque) | 连续存储的指向不同元素的指针所组成的数组 | <deque>
| 集合(set) | 由结点组成的红黑树,每个结点包含一个元素 | <set>
| 多重集合(multiset) | 允许存在两个次序相等的元素集合 | <set>
| 栈(stack) | 先进后出的值的排序 | <stack>
| 队列(queue) | 先进先出的值的排序 | <queue>
| 优先队列(priority_queue) | 元素次序由所存储的值对上某种谓词决定的队列 | <queue>
| 映射(map) | 由键值对组成的集合 | <map>
| 多重映射(multimap) | 允许存在相等次序的映射 | <map> |
3、迭代器
迭代器是一种检查容器内元素并遍历元素的数据类型。C++更趋向于使用迭代器而不是下标操作,因为标准库为每一种标准容器(如vector)定义了一种迭代器类型,而只用少数容器(如vector)支持下标操作访问容器元素。
在STL中,迭代器主要分为5类。各自是:输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机訪问迭代器。
输入迭代器:仅仅读。支持++、==、!=;
输出迭代器:仅仅写,支持++;
前向迭代器:读写,支持++、==、!=。
双向迭代器:读写,支持++、--。 C++的全部标准库容器都至少在双向迭代器的层次上。
随机訪问迭代器:读写,支持++、--、[n]、-n、<、<=、>、>=。
用迭代器访问容器中的数据:
- vector<int>v(1,2,3,4,5);
- for(auto iter = v.begin(); i != v.end(); i++) {
- cout << *iter << endl;
- }
复制代码
4、算法
STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成。
① 非可变序列算法:指不直接修改其所操作的容器内容的算法。
② 可变序列算法:指可以修改它们所操作的容器内容的算法。
③ 排序算法:包括对序列进行排序和合并的算法、搜索算法以及有序序列上的集合操作。
④ 数值算法:对容器内容进行数值计算。
5、C++标准库
官方文档:传送门
博文参见:传送门 |
|