
C++/STL(标准模板库)
文章平均质量分 50
C++/STL标准模板库【STL提供了有六大组件,包括了容器,算法,迭代器,仿函数,适配器以及空间适配器】
u013250861
这个作者很懒,什么都没留下…
展开
-
C++-STL-组件(一)-容器01:string【深浅拷贝、模拟实现、写时拷贝】
为什么学习 string 类呢?C语言中是没有字符串类型的,字符串是以 ‘\0’ 结尾的一些字符的集合(即字符数组),为了操作方便,C 标准库 中提供了一些 str 系列的库函数,但是这些库函数与字符串是分离开的,不太符合面向对象 OOP 的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。C++ STL string 是对字符串进行管理的类。实际上就是一个管理字符数组的顺序表。在常规工作中,为了简单、方便、快捷,基本都使用 string 类,很少有人去使用 C 语言库中的.........原创 2022-06-16 21:00:46 · 504 阅读 · 0 评论 -
C++-STL概论:Standard Template Library;标准模板库【STL六大组件:容器、算法、迭代器、仿函数、适配器、空间配置器】
长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出”可重复运用的东西”的方法,让程序员的心血不止于随时间的迁移,人事异动而烟消云散,从函数(functions),类别(classes),函数库(function libraries),类别库(class libraries)、各种组件,从模块化设计,到面向对象(object oriented ),为的就是复用性的提升。复用性必须建立在某种标准之上。但是在许多环境下,就连软件开发最基本的数据结构(data structures) 和算法(al原创 2022-06-11 21:12:34 · 329 阅读 · 0 评论 -
C++-STL-组件(一)-容器04:deque(双端动态数组)
Vector容器是单向开口的连续内存空间,deque则是一种双向开口的连续线性空间。所谓的双向开口,意思是可以在头尾两端分别做元素的插入和删除操作,当然,vector容器也可以在头尾两端插入元素,但是在其头部操作效率奇差,无法被接受。Deque容器和vector容器最大的差异,虽然deque容器也提供了Random Access Iterator,但是它的迭代器并不是普通的指针,其复杂度和vector不是一个量级,这当然影响各个运算的层面。因此,除非有必要,我们应该尽可能的使用vector,而不是dequ原创 2022-06-17 00:18:09 · 257 阅读 · 0 评论 -
C++-STL-组件(一)-容器02:vector(动态数组)【一维:vector<int> obj(m)】【二维:vector<vector<int>> obj(m, vector<int>(n)】
vector的数据安排以及操作方式,与array非常相似,两者的唯一差别在于空间的运用的灵活性。Vector的实现技术,关键在于其对大小的控制以及重新配置时的数据移动效率,一旦vector旧空间满了,如果客户每新增一个元素,vector内部只是扩充一个元素的空间,实为不智,因为所谓的扩充空间(不论多大),一如刚所说,是”配置新空间-数据移动-释放旧空间”的大工程,时间成本很高,应该加入某种未雨绸缪的考虑,稍后我们便可以看到vector的空间配置策略。Vector维护一个线性空间,所以不论元素的型别如何,普通原创 2022-06-17 00:16:04 · 542 阅读 · 0 评论 -
C++-STL-组件(一)-容器03:list(双向链表)
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相较于vector的连续线性空间,list就显得负责许多,它的好处是每次插入或者删除一个元素,就是配置或者释放一个元素的空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素的移除,list永远是常数时间。原创 2022-06-17 00:19:21 · 1228 阅读 · 0 评论 -
C++-STL-组件(一)-容器05:stack(栈)
stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口,形式如图所示。stack容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端外,没有任何其他方法可以存取stack的其他元素。换言之,stack不允许有遍历行为。有元素推入栈的操作称为:push,将元素推出stack的操作称为pop.Stack所有元素的进出都必须符合”先进后出”的条件,只有stack顶端的元素,才有机会被外界取用。Stack不提供遍历功能,也不提供迭代器。......原创 2022-06-17 00:20:07 · 360 阅读 · 0 评论 -
C++-STL-组件(一)-容器06:queue(队列)
Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口,queue容器允许从一端新增元素,从另一端移除元素。Queue所有元素的进出都必须符合”先进先出”的条件,只有queue的顶端元素,才有机会被外界取用。Queue不提供遍历功能,也不提供迭代器。......原创 2022-06-17 00:20:58 · 578 阅读 · 0 评论 -
C++-STL-组件(一)-容器08:map/multimap(字典)
Map的特性是,所有元素都会根据元素的键值自动排序。Map所有的元素都是pair,同时拥有实值和键值,pair的第一元素被视为键值,第二元素被视为实值,map不允许两个元素有相同的键值。我们可以通过map的迭代器改变map的键值吗?答案是不行,因为map的键值关系到map元素的排列规则,任意改变map键值将会严重破坏map组织。如果想要修改元素的实值,那么是可以的。Map和list拥有相同的某些性质,当对它的容器元素进行新增操作或者删除操作时,操作之前的所有迭代器,在操作完成之后依然有效,当然被删除的那个元原创 2022-06-11 22:05:05 · 382 阅读 · 0 评论 -
C++-STL-组件(一)-容器07:set/multiset容器(集合)
Set的特性是。所有元素都会根据元素的键值自动被排序。Set的元素不像map那样可以同时拥有实值和键值,set的元素即是键值又是实值。Set不允许两个元素有相同的键值。我们可以通过set的迭代器改变set元素的值吗?不行,因为set元素值就是其键值,关系到set元素的排序规则。如果任意改变set元素值,会严重破坏set组织。换句话说,set的iterator是一种const_iterator.set拥有和list某些相同的性质,当对容器中的元素进行插入操作或者删除操作的时候,操作之前所有的迭代器,在操作完成原创 2022-06-17 00:22:05 · 184 阅读 · 0 评论 -
C++-STL-组件(二)-算法01:冒泡
见名思义,就是各种常用的算法(比如:冒泡,原创 2022-11-06 21:32:50 · 112 阅读 · 0 评论 -
C++-STL-组件(三)-迭代器01:这个可以看作成是一个指针,扮演了容器与算法之间的胶合剂的作用;
这个可以看作成是一个指针,扮演了容器与算法之间的胶合剂的作用;原创 2022-11-06 21:33:31 · 118 阅读 · 0 评论 -
C++-STL-组件(四)-仿函数01:行为类似熟知的函数,它的作用可作为算法的某种策略;
行为类似熟知的函数,它的作用可作为算法的某种策略;原创 2022-11-06 21:34:10 · 111 阅读 · 0 评论 -
C++-STL-组件(五)-适配器01:一种用来当作修饰(容器)或(仿函数)或(迭代器)接口的东西;
一种用来当作修饰(容器)或(仿函数)或(迭代器)接口的东西;原创 2022-11-06 21:34:43 · 115 阅读 · 0 评论 -
C++-STL-组件(六)-空间配置器/分配器01:负责空间的配置与管理的作用;
负责空间的配置与管理的作用;原创 2022-11-06 21:35:13 · 109 阅读 · 0 评论