STL的基本概念

STL 基本概念

STL(Standard Template Library,标准模板库),
STL从广义上分为: **容器(container) 算法(algorithm) 迭代器(iterator),**容器和算法之间通过迭代器进行无缝连接

STL具有高可重用性,高性能,高移植性,跨平台的优点。

高可重用性:STL 中几乎所有的代码都采用了模板类和模版函数的方式实现,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。关于模板的知识,已经给大家介绍了。
高性能:如 map可以高效地从十万条记录里面查找出指定的记录,因为 map 是采用红黑树的变体实现的。(红黑树是平横二叉树的一种)
高移植性:如在项目A上用 STL编写的模块,可以直接移植到项目B上。
跨平台:如用 windows 的 Visual Studio 编写的代码可以在 Mac OS 的 XCode上直接编译。

STL 三大组件介绍

容器

STL 中容器是指存储有限数据元素的一种数据结构
容器可以包含容器

STL 中容器分为:序列式容器关联式容器
序列式容器就是根据学生进入教室的时间和地点来决定学生在那个位置,跟学生是谁没关系。
关联式容器是指我教室的座位按照一定规则确定好了,每个学生进来,比如根据学生出生年月,从小到大排列,学生坐在那个位置,必须由我的规则来规定。

迭代器

迭代器是一种抽象出来的概念,现实中不容易找出来某项事物与之对应,所以较难理解。但是在我们程序中,比如我们写的数据,我们通过[]操作符遍历取值,那么[]就是一个迭代器,也必须说我们经常用的指针,他也是一种迭代器。

迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。
STL的基本概念

算法

以有限的步骤,解决逻辑或者数学上的问题,
STL提供的算法都很高效,可复用性
STL提供了大约100 个实现算法的模版函数

总结

STL 容器不单单可以存储基础数据类型,也可以存储类对象

STL中 容器(数据结构) 和 算法 的设计是彼此分离,这样的好处就是:
1 容器和算法的编写可以分别编写,互补影响
2 容器只需要提供迭代器 算法只需要拿到迭代器就可以完成容器和算法之间的关联
和操作

容器:
vector < int > v //STL 中的标准容器之一 :动态数组
迭代器 :
vector < int >::iterator pStart = v.begin(); //vector 容器提供了 begin()方法 返回指向第 一个元素的迭代器
vector < int >::iterator pEnd = v.end(); //vector 容器提供了 end()方法 返回指向最后一个 元素下一个位置的迭代器
算法
count 算法 用于统计元素的个数
int n = count(pStart, pEnd, 5);

通过迭代器遍历

while (pStart != pEnd)
{
cout << pStart->age << " "; pStart++;
}
***------------------------------------------------
for(vector< Person>::iterator it = v.begin() ; it != v.end() ;it++)
{
cout << (*it).age << (*it).id << endl;
}