STL基本介绍

一.定义

STL(Standard Template Library,标准模板库),是惠普实验室开发的一系列软件的统称。现在主要出现在 C++ 中,但是在引入 C++ 之前该技术已经存在很长时间了。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。STL 几乎所有的代码都采用了模板类或者模板函数,这相比传统的由函数和类组成的库来说提供了更好的代码复用机会。


二.优点

1> STL 是 C++ 的一部分,因此无须额外安装,内嵌在编译器之内;

2> STL 的一个重要特点就是 数据结构与算法的分离,使得 STL 变得非常通用;

3> STL 的源码较为难懂,但是程序员无须思考STL具体的实现过程,只要能够熟练使用STL可;

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

        高可重用性:STL中几乎所有代码均采用模板类和模板函数的方式实现,相比传统的由函数和            类组成的库来说提供了更好的代码复用机会。

        高性能:较为高效;

        高移植性:项目之间可直接移植;

        跨平台:不同操作系统之间可以通用;


 三.STL内容介绍(六大组件)

    容器(Container):是一种数据结构,如vector(动态/可变数组)、list()、deque()、set(集合)、map等,用来存放数据。以模板类的方法提供,以迭代器的形式对容器中的数据进行访问 ;

             容器的分类:

             (1)序列式容器: 强调值的排序,序列式容器中的每个元素均有固定的位置--->由元素进入容                                      器的时机和地点来决定。

             (1)关联式容器: 二叉树结构,各元素之间没有严格的物理上的顺序关系位置已经不是由元                                        素进入容器的时机和地点来决定。


    迭代器(Iterator)各种常用的算法,如sort、find、copy、for_each等,提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。迭代器使用非常类似于指针,初学阶段我们可以先理解迭代器为指针。(每个容器都有自己专属的迭代器);

               迭代器的种类如下(常用的容器有 双向迭代器 和 随机访问迭代器):


    算法(Algorithm),通过有限的步骤,解决逻辑或数学上的问题,这一门学科我们叫做算法。STL 提供了大约100个实现算法的模板函数,例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象等 ;

    适配器(Adaptor),一种用来修饰容器或者仿函数或迭代器接口的东西;

    仿函数(Functor),行为类似函数,可作为算法的某种策略;

    分配器/空间配置器(allocator),负责空间的配置与管理。


四.STL 容器算法迭代器分离案例(数组)

#include<iostream>
using namespace std;
// 算法,负责计算容器中 0元素的个数 
int mycount(int* start,int* end,int val){
	int num = 0;
	while(start != end){
		if(*start == val){
			num++;
		}
		start++;
	}
	return num;
}
int main(){
	// 数组容器 
	int arry[] = {0,7,5,4,9,2,0};
    //设置迭代器
	int* Pbegin =arry;	//指向元素的第一个位置 
	int* Pend = &(arry[sizeof(arry)/sizeof(int)]);    //指向最后一个元素的下一个位置 
	int num = mycount(Pbegin,Pend,0);    //将迭代器给函数算法传参
	cout<<"0的个数有: "<<num<<" 个"<<endl;
	return 0;
}

结果如下:

 结果分析:

        定义容器存储元素,同时设置好迭代器,算法独立,但是要将迭代器作为参数对其进行传参;


五.STL 容器算法迭代器分离案例(基本数据类型和自定义类型)

基本数据类型(int)

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void printVector(int v){
	cout<< v <<" ";
}
void room(){
	// 定义容器并存储基本数据类型
	vector<int> v;
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(40);
	vector<int>::iterator pBegin = v.begin();
	vector<int>::iterator pEnd = v.end();
	// 通过STL提供的for_each算法 , 并添加头文件
	for_each(pBegin,pEnd,printVector);	
}
int main(){
	room();
	return 0;
}

 自定义类型:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Person{
public:
	Person(int num,int age):num(num),age(age){}
	
public:
		int num;
		int age;
};
void room(){
	// 定义容器并存储自定义数据类型 
	Person p1(10,20),p2(30,40),p3(40,50),p4(56,90);
	vector<Person> v;
	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);
	v.push_back(p4);
	// 通过for循环实现 
	for(vector<Person>::iterator it=v.begin();it != v.end();it++){
		cout<< (*it).num<<" "<<(*it).age<<endl;
	}	
}
int main(){
	room();
	return 0;
}


参考资料:

C++进阶之STL_哔哩哔哩_bilibili

该视频配套讲义:c++进阶(stl资源),非原创,配套b站(C++进阶之STL)教程-C/C++文档类资源-CSDN下载


写在最后:

       该博客是本人学习的一些总结,如果各位有不同见解,可以评论提出或者与我联系改正,谢谢阅览!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我很乐意为您介绍STL的六大组件。STL(Standard Template Library)是C++的一个标准程序库。它由一些必要部分和一些有用的组件组成。六大组件分别是:容器、迭代器、算法、仿函数、适配器、分配器。 容器(Containers)是用来容纳其他对象的对象(即存储数据的数据结构),STL中最基本的概念。容器分为序列式容器和关联式容器,序列式容器以元素在容器中的位置来组织和管理元素,关联式容器以元素的关键字来组织和管理元素。 迭代器(Iterators)是一个可遍历STL容器内所有元素的对象,它定义了一种遍历STL容器元素的标准方式,使得STL算法可以操作各种不同类型的STL容器。 算法(Algorithms)是定义在容器和迭代器之上的通用的重要的操作,比如查找、排序和删除等。算法可以大大简化C++程序员的工作,使代码更加简洁和易于维护。 仿函数(Functors)是一种与函数类似的对象,可以用于一些STL算法。仿函数实际上是一个类,其中至少定义了一个()运算符,使得该仿函数对象可以像函数一样被调用。 适配器(Adapters)是一种用于修改容器接口的对象,即将一种容器适配为另一种容器接口。 分配器(Allocators)是STL容器的内存管理工具,分配器负责分配和回收STL容器内元素的内存空间。 希望这些简要介绍能够帮助您了解STL的六大组件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S_h_a_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值