![](https://img-blog.csdnimg.cn/20201031202007493.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++的STL详解
文章平均质量分 92
对C++的STL库的底层实现深入学习,包括容器,算法,迭代器。
马小超i
你若盛开 清风自来
展开
-
C++STL中链表list的底层实现和常用操作
STL其他内容解析:关于C++中STL的理解和应用目录List概述List的节点List的迭代器List的常用函数List概述List和Vector都是STL的顺序容器,唯一不同的地方就在于:Vector是一段连续的内存空间,List则是一段不连续的内存空间,相比于Vector来说,List在每次插入和删除的时候,只需要配置或释放一个元素空间,对于任何位置的插入和删除操作,List永远能做到常数时间。但是,List由于不连续的内存空间,导致不支持随机寻址,所以尺有所.原创 2021-01-23 19:46:44 · 1113 阅读 · 0 评论 -
C++11新特性:STL中的无序关联容器unordered_map的底层实现和用法
unordered_map:优点: 因为内部实现了哈希表,因此其查找速度非常的快缺点: 哈希表的建立比较耗费时间适用处:对于查找问题,unordered_map会更加高效一些,因此遇到查找问题,常会考虑一下用unordered_map...原创 2020-11-14 14:57:29 · 7884 阅读 · 0 评论 -
C++ STL栈stack的底层实现和用法
STL其他内容解析:关于C++中STL的理解和应用首先要知道,栈是一种容器适配器,即在已有的容器之上封装而成。关于容器适配器:C++ STL中的容器适配器详解栈stack栈是一种先进后出的数据结构。常用操作:s.push(X)//在栈顶压入新元素,参数X为要压入的元素s.pop()//删除栈顶元素但不返回其值s.top()//返回栈顶的元素,但不删除该元素s.empty()//如果栈为空返回true,否则返回falses.size()//返回栈中元素的个数...原创 2020-10-31 20:01:12 · 2631 阅读 · 0 评论 -
C++ STL队列queue和优先队列priority_queue的底层实现和用法
STL其他内容解析:关于C++中STL的理解和应用首先要知道,队列和优先队列都是容器适配器,即在已有的容器之上封装而成。关于容器适配器:C++ STL中的容器适配器详解队列queue队列queue是一种先进先出的数据结构,并且添加元素只能添加在尾部,删除元素只能删除首元素。常用操作:q.push(x); //入队:将x压入队列的末端q.pop(); //出队:弹出队列的队首元素,不返回任何值q.front(); //返回队首元素q.back(); //返回队尾元素q.原创 2020-10-31 19:55:31 · 3951 阅读 · 0 评论 -
C++ STL双端队列deque的底层实现及常用操作
STL其他内容解析:关于C++中STL的理解和应用deque容器的介绍Vector 容器是单向开口的连续内存空间,deque则是一种双向开口的连续线性空间。所谓的双向开口,意思是可以在头尾两端分别做元素的插入和删除操作,当然,vector 容器也可以在头尾两端插入元素,但是在其头部操作效率奇差,无法被接受。deque的操作图示 deque 容器和 vector 容器最大的差异,一在于 deque 允许使用常数项时间对头端进行元素的插入和删除操作。二在于 deque 没有容量...原创 2020-10-31 15:55:03 · 4519 阅读 · 0 评论 -
C++ STL中关于顺序容器的总结
顺序容器概述C++的STL库中提供了很多的容器类型,一个容器类型就是一个类对象,方便开发者对数据进行操作,如增删查等操作,这些操作不依赖容器中的数据的类型,而是更具数据在容器中的位置以及容器的结构。容器 功能 vertor 可改变数组的大小,支持快速查找,下标查找,但是对于插入和删除操作,需要系统会移动所有元素,效率会比较慢 deque 双端队列,支持快速访问,在容器的头和尾插入数据会很快,但是在除了头和尾插入或者删除数据和数组一样需要移动元素,效率较低。 list原创 2020-10-31 15:17:40 · 294 阅读 · 0 评论 -
C++ STL中的容器适配器详解
容器适配器queue:C++的STL中队列queue模板类的定义在<queue>头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque类型。C++队列Queue是一种容器适配器,并不是容器,它给予程序员一种先进先出(FIFO)的数据结构。常用操作:以队列q: queue<int> q;queue入队,如例:q.push(x); 将x 接到队列的末端。queue出队,如例:q.po..原创 2020-10-31 19:21:39 · 2140 阅读 · 0 评论 -
C++STL中sort排序算法的底层实现方式和常见问题
常见问题:数据量大和数据量小都适合用快速排序吗? 快速排序的时间复杂度不是稳定的nlogn,最坏情况会变成n^2,怎么解决复杂度恶化问题? 快速排序递归实现时,怎么解决递归层次过深的问题? 递归过深会引发什么问题? 怎么控制递归深度?如果达到递归深度了还没排完序怎么办?并非所有容器都使用sort算法既然问的是STL的sort算法实现,那么先确认一个问题,哪些STL容器需要用到sort算法?首先,关系型容器拥有自动排序功能,因为底层采用RB-Tree,所以不需要用到sort算法。其次,序原创 2020-10-19 17:44:22 · 3673 阅读 · 2 评论 -
C++STL中map的底层实现和使用
作用:std map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力。STL的map底层是用红黑树实现的,查找时间复杂度是log(n);常用函数: begin() 返回指向map头部的迭代器 clear() 删除所有元素 count() 返回指定元素出现的次数 empty() 如果map为空则返回tr.原创 2020-08-18 09:44:27 · 14213 阅读 · 0 评论 -
C++STL中集合set的底层实现和常用操作
set:集合set和数学上的集合是一致的,每个元素最多只出现一次,并且是排好序的,和sort一样,自定义类型也可以构造set,但同样必须定义<运算符。multiset允许元素重复。1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)set函数begi.原创 2020-08-17 21:24:57 · 7460 阅读 · 0 评论 -
C++STL中不定长数组vector的底层实现和常用操作
作用:vector容器不但能像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单,高效的容器,完全可以代替数组,vector具有自动管理功能,对于元素的插入和删除,可动态调整所占的内存空间。vector模版类需要两个模版参数,第一个参数是存储元素的数据类型,第二个参数是存储分配器的类型,其中第二个参数是可选的,如果不给出第二个参数,将使用默认的分配器。使用要加头文件<vector>。vector常用函数定义: vector<类型> 变量名称。 如 .原创 2020-08-17 17:24:54 · 1331 阅读 · 0 评论 -
C++STL中的迭代器iterator的作用和使用方法
作用:迭代器(iterator)是一种抽象的设计理念,通过迭代器可以在不了解容器内部原理的情况下遍历容器。除此之外,STL中迭代器一个最重要的作用就是作为容器(vector,list等)与STL算法的粘结剂,只要容器提供迭代器的接口,同一套算法代码可以利用在完全不同的容器中,这是抽象思想的经典应用。使用: vector<int>::iterator it; vector<int> a; vector<int> b; for (it=a.beg.原创 2020-08-17 16:25:11 · 3125 阅读 · 0 评论 -
关于C++中STL的理解和应用【容器、算法、迭代器】
目录STL分类:容器:顺序容器: 不定长数组vector: 双端队列deque:关联容器: 集合set: 映射map: 无序关联容器unordered_map容器适配器: 栈stack: 队列queue和优先队列priority_queue:迭代器:算法: 排序算法sort:STL分类:STL(Standard Template Library)是标准模板库的简称,包含大致三大类:算法(algorithm)、容器...原创 2020-08-17 21:25:49 · 1441 阅读 · 0 评论