STL基本理论:容器算法和迭代器

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的工作机制,算法容器之间通过迭代器进行访问,主函数里面自己设计了一个迭代器,然后在算法里面进行简单遍历查找。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值