STL的基本概念
什么事STL??stl叫标准模板库,带模板两个字,说明stl是基于模板基础实现的,stl从广义上分,容器,算法,迭代器,容器和算法之间通过迭代器进行访问。
stl是c++里面内置的,拿来直接用就可以
stl一个重要的特点,算法和数据结构分离,
使用STL的好处
1)STL是C++的一部分,因此也不用额外安装什么东西,他被内置在你的编译器内。
2)STL的一个重要的特点是数据结构和算法的分离,
3)程序员可以不用思考STL具体的实验过程,只要能够熟练地使用STL即可。
4)STL具有高的可用性,高性能,高移植性,跨平台等特点。
容器的概念
什么叫容器??
可以放一些存储数据的东西叫做容器,放水的杯子,杯子可以放水,那杯子就是容器,水是元素。
教室是不是一个容器??
教室就是一个容器,每个人都是元素。
放大了看
教学楼是不是容器?现在教室变成了元素
从这里我们可以看出:容器中可以嵌套容器
在STl中容器分为序列式容器和关联式容器
序列式容器
元素防盗容器中会有一个位置,这个元素在这个容器中的位置,是由你进入容器的时间和地点来决定的,你先进来排到前面这就是序列式容器,由你进入容器的时机和地点来决定
关联式容器
关联式容器跟先进后进没有关系了,容器已经规定好了,大小个来排,例如说教室里的人,按照大小个来排,进来的时候不用选了,由容器自己决定了,与时间地点没有关系,进入容器的位置不是由时机和地点来决定,这个是关联式容器。
迭代器
迭代器是用来遍历容器中元素的指针,容器中会有一些元素,什么叫迭代器呢??迭代器相当于一个指针, 默认指向第一个元素,当对迭代器++的时候,会往后移一位,既然说迭代器类似于指针,那么对迭代器取*,是不是就可以去到这个元素?
迭代器就是一个可以理解为指针,对指针的操作同样也可以对迭代器操作
实际上,迭代器是一个类的对象,能进行+±-,肯定是这个类重载了这些操作符,这个类封装了一个指针。
算法
算法就是解决具体问题的,通过有限的步骤来解决问题,或大或小,或多或少解决问题。
STL实现的模板函数有100多个
stl的一个基本设计思想
STL在设计的时候,这个库比较庞大,开发容器的是一帮人,另一帮人开发算法,怎么能让算法作用到容器上呢??所以说,写容器的只用给写算法的提供迭代器,迭代器在这两者之间作为一个桥梁。
容器算法迭代器分离实现的小案例
直到迭代器加到最后一个迭代器就好,通过迭代器进行遍历整个元素
#include <iostream>
#include <algorithm>
using namespace std;
int mucount(int *start,int* end,int val)
{
int count=0;
while (start != end)
{
if (*start == val)
{
count++;
}
start++;
}
return count;
}
int main()
{
//数组也算容器,只是不是STL的标准容器
int arr[] = { 0,12,10,1200 ,112,1,0,0};
int* pBegin=arr;//迭代器开始位置
int* pEnd = &(arr[sizeof(arr)/sizeof(int)]);
int num = mucount(pBegin, pEnd, 0);
cout << num << endl;
return 0;
}
这个代码简单的实现了STL的工作机制,算法容器之间通过迭代器进行访问,主函数里面自己设计了一个迭代器,然后在算法里面进行简单遍历查找。