当前位置:网站首页>初识STL

初识STL

2022-04-23 14:12:00 ぃ灵彧が

初识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 <int> l;
for (int i =0;i <100;i++ )
l.push_back (i);

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

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

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

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

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

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

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

算法

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

常见的部分算法如下:

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

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

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

版权声明
本文为[ぃ灵彧が]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_54754302/article/details/124357661