初识STL

网友投稿 640 2022-10-05

初识STL

初识STL

初识STL

STL简介:

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。

C++标准模板库的核心包括容器 (Containers)、算法(Algorithms)、迭代器(iterators)三个组件,其中1.容器是用来管理某一类对象的集合,C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等;2.算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作;3.迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。这三个组件都带有丰富的预定义函数,帮助我们通过简单的方式处理复杂的任务。

STL的特点:

STL的一个重要特点是数据结构和算法的分离:

尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组;

STL另一个重要特点是它不是面向对象的:

为了具有足够通用性,STL主要依赖于模板而不是封装,继承和多态性——OOP的三个要素。你在STL中找不到任何明显的类继承关系。这好像是一种倒退,但这正好是使得STL的组件具有广泛通用性的底层特征。另外,由于STL是基于模板,内联函数的使用使得生成的代码短小高效;

STL组件:

STL 组件主要包括容器,迭代器、算法和仿函数。

容器

容器即用来存储并管理某类对象的集合。

例如鱼缸是用来盛放金鱼的容器。每一种容器都有其优点和缺点。为满足程序的各种需求,STL 准备了多种容器类型,容器可以是 arrays 或是 linked lists,或者每个元素有特别的键值。

迭代器

迭代器用于在一个对象群集的元素上进行遍历动作。对象群集可能是容器,也可能是容器的一部分。

迭代器的主要用途是为容器提供一组很小的公共接口。利用这个接口,某项操作可以行进至群集内的下一个元素。每种容器都提供了各自的迭代器。迭代器了解该容器的内部结构,所以能够正确行进。迭代器的接口和一般指针类似。

算法

用来处理群集内的元素,可以出于不同目的搜寻、排序、修改、使用那些元素。

所有容器的迭代器都提供一致的接口,通过迭代器的协助,算法程序可以用于任意容器。

STL 的一个特性是将数据和操作分离。数据由容器类别加以管理,操作则由可定制的算法定义。迭代器在两者之间充当“粘合剂”,以使算法可以和容器交互运作。

STL 的另一个特性即组件可以针对任意型别运作。“标准模板库”这一名称即表示“可接受任意型别”的模板,并且这些型别均可执行必要操作。

在 STL 中,容器又分为序列式容器和关联式容器两大类,而迭代器的功能主要是遍历容器内全部或部分元素的对象。迭代器可划分为 5 种类属,这 5 种类属归属两种类型:双向迭代器和随机存取迭代器。

SIL 中提供的算法包括搜寻、排序、复制、重新排序、修改、数值运算等。

仿函数

STL中大量运用了仿函数。仿函数具有泛型编程强大的威力,是纯粹抽象概念的例证。

STL之容器与算法:

容器

STL 包含诸多容器类。容器类是可以包含其他对象的类,就像数组和队列堆栈等数据结构包含整数、小数、类等数据成员一样。STL 可以包含常见的向量类、链表类、双向队列类、集合类、图类等,每个类都是一种模板,这些模板可以包含各种类型的对象。

下述代码是常用的 vector 赋值方法:

vector l;for (int i =0;i <100;i++ )l.push_back (i);

下述代码采用 map 容器进行二维元素的管理:

map > cap; //按从小到大排序cap ["Ark"] ="Little Rock";cap ["New"] ="Albany";

map 类似于​​二维数组​​,但比二维数组灵活得多。

目前,STL 中已经提供的容器主要如下:

vector:一种向量。list:一个双向链表容器,完成了标准 C++ 数据结构中链表的所有功能。queue:一种队列容器,完成了标准 C++ 数据结构中队列的所有功能。stack:一种栈容器,完成了标准 C++ 数据结构中栈的所有功能。deque:双端队列容器,完成了标准 C++ 数据结构中栈的所有功能。priority_queue:一种按值排序的队列容器。set:一种集合容器。multiset:一种允许出现重复元素的集合容器。map:一种关联数组容器。multimap:一种允许出现重复 key 值的关联数组容器。

以上容器设计高效,还提供了接口。程序员可以在任何适当的地方使用它们。

容器可以分为序列式容器和关联式容器两大类。序列式容器主要有 vector、list 和 deque;关联式容器包括 set、map、multiset 和 multimap 等容器模板类。

算法

STL 提供了非常多的数据结构算法。这些算法在命名空间 std 的范围内定义,通过包含头文件 来获得使用权。

常见的部分算法如下:

for_each();find();find_if();count();count_if();replace();replace_if();copy();unique_copy();sort();equal_range();merge();

STL 中的所有算法都是基于模板实现的。

由于是出于好奇,私自在网上浏览查阅所得,没有进行过系统,全面的学习,若有不正确和不足的地方还请指教哦ψ(`∇´)ψ( ̄︶ ̄)↗

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:交换机与路由器技术:静态NAT、动态NAT、PAT和端口镜像
下一篇:微信小程序中修改数据(页面数据和数组数据)的代码实现(微信小程序显示数组数据)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~