STL
文章平均质量分 91
five丶
上海大学软工研究生,cpp后端方向
展开
-
STL(八):关联式容器
前言关联式容器与序列式容器不同,元素插入关联式容器后,插入位置是由容器采用一定的算法计算的,与插入的时间无关。本文介绍STL中哈系表、集合和map等关联式容器。哈希表hashtable是SGI STL中的哈希表,标准库中使用unordered_map代替hashtable,但unordered_map也是以hashtable为基础的。哈希表是一种查找操作只需要o(1)时间复杂度的数据结构,哈希表由一串连续的的bucket构成,每个bucket上挂着一个链表,链表中储存的就是用户的数据,哈系表通过散列函原创 2021-05-26 22:25:44 · 164 阅读 · 0 评论 -
STL(七):heap和priority_queue
前言终于快写完序列式容器了!剩最后两个heap和priority_queue,这篇一起写完,明天要开始关联式容器了。heapheap是STL中的堆数据结构,堆其实是一种完全二叉树,即非叶子节点的左右孩子必不为空的二叉树。堆分为最大堆和最小堆,最大堆的特点就是堆顶的元素必定是所有元素中的最大值,而最小堆的特点就是堆顶元素的值必定是所有元素中的最小值,比如下面的结构就是一个最大堆。STL底层使用vector来储存堆中的元素比如图中的最大堆会被储存为[23, 20, 13, 3, 10, 4],这是由于原创 2021-05-25 21:37:04 · 234 阅读 · 0 评论 -
STL(六):list和slist
前言我们已经介绍了vector和deque容器及其适配器,本文我们介绍STL中的链表——list和forward_list。链表链表是在内存中一种不连续的数据结构,链表的每个元素都是一个节点,节点中包含数据和指向下一个元素的指针,如下图:链表通过指针来寻找下一个元素,因此在内存中可以不连续,这极大地提高了使用内存的灵活性。与链表类似的是双向链表,双向链表包含next和prev两个指针:listSTL的list是一种双向链表数据结构,与vector、deque的实现不同,list也是继承自一个原创 2021-05-25 17:57:10 · 283 阅读 · 0 评论 -
STL(五):deque和stack,queue
前言deque是一种序列式容器,翻译为双端队列,deque实现了常数级别的头尾的插入和删除操作,但代价是deque具有比vector复杂的多的机制。deque的设计deque的类图与vector非常相似,数据结构都是存放在_Deque_base中,deque继承_Deque_base,然后定义一些内嵌类型和成员方法。类图中展示了deque的数据成员主要包括一个指针数组和两个迭代器,这与deque的结构有关,deque维护一个中控器,就是指针数组_M_map,中控器中每个元素指向一个数组,数组中是d原创 2021-05-25 00:43:49 · 291 阅读 · 0 评论 -
STL(四):vector和array
前言STL的容器分为序列式容器和关联式容器,其中序列式容器的特点是每个元素均有特定的位置,这个位置和元素的值无关,下面我们介绍四种序列式容器。vectorvector是一种支持动态扩容的数组,在SGI中,其继承关系如下:这里与GNU的STL稍有不同,GNU中_vector_base包含一个名为_vector_impl的成员,这个成员实现了_M_allocate()和_M_deallocate(),而SGI中可以看到是直接在_Vector_base中实现的。vector默认的allocator会为原创 2021-05-24 15:34:36 · 343 阅读 · 0 评论 -
STL(三):traits
前言在前面的介绍中,我们已经多次接触到traits,traits是一种泛型编程技法,用侯捷老师的话说,traits可以回答算法提出的问题,本文我们就来看看基本的traits技法和STL中的traits。traits原理泛型编程通过传入模板元的方法统一了不同类型的接口,在编译时,类型能够自动推导为传入的类型,这被称为泛化,比如下面的结构:template <typename T>struct A{ bool value = true;};泛化时与传入的参数类型是无关的,无论T的类原创 2021-05-23 23:05:55 · 226 阅读 · 0 评论 -
STL(二):Iterator
前言如果把STL的algorithm包含了各种算法的实现,这些算法必须能对不同的容器和容器的适配器进行操作,比如下面的例子:#include <bits/stdc++.h>using namespace std;int main(){ vector<int> m_vec{1, 3, 2, 4}; deque<int> m_deque{1, 3, 2, 4}; sort(m_vec.begin(), m_vec.end()); so原创 2021-05-23 20:53:01 · 196 阅读 · 0 评论 -
STL(一):allocator
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结两级配置前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,原创 2021-05-22 23:13:47 · 138 阅读 · 0 评论