![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STL
文章平均质量分 80
STL基础学习
BearPot
你太容易因为别人优秀而焦虑 你需要的是平静的把自己的事做好
个人网站:http://www.potba.cn/
展开
-
373. 查找和最小的 K 对数字 ,为什么要先把一个数组的下标都插入
找出第一个最小数对之后寻找下一个,由于数对 {1, 2} 在 num1 和 num2 内的下标分别为 0 和 0,考虑到数组是有序的,所以下一个最小数对在 num1 和 num2 内的下标可能是 1 和 0 或者 0 和 1,其中下标为 1 和 0 的数对 {7, 2} 已经在堆内,所以只要添加数对 {1, 4} 即可。可以发现这个添加的数对 {1, 4} 的下标和已经找到的前一个最小数对 {1, 2} 的下标的区别是,在 nums1 的下标不变,在 nums2 的下标加 1。,其中第一个元素来自。原创 2023-09-06 13:26:21 · 93 阅读 · 0 评论 -
有关C++priority_queue 创建固定大小的最小堆的问题
那天在写东西的时候发现好像priority_queue是没办法直接构建大小的,想想也是,一个容器适配器怎么去给他固定size呢,然后看了一下priority_queue的构造函数确实也是不能这么搞的。那怎么办呢,比如给个固定大小k,让你找到第k个最大的元素。没法直接构建,那就在插入元素循环里面if控制一下就行。原创 2023-04-12 23:09:37 · 502 阅读 · 1 评论 -
聊聊函数适配器和迭代适配器demo
使用inserter()时需要指定容器类型和插入的位置,函数返回一个迭代器,可以通过这个迭代器来向容器中插入数据,而不必考虑容器的具体类型和位置。迭代器适配器,inserter将元素插入到容器的指定位置,支持多种容器类型。inserter包含在头文件中。函数适配器,bind2nd ,bind1st等等已经被bind 绑定器 替换了, not1函数适配器。迭代器适配器->rbegin(),rend() 就是尾巴和头,和正常走的方向相反。有好几种,容器适配器stack,queue。原创 2023-07-21 00:29:16 · 92 阅读 · 0 评论 -
有关STL关联/非关联容器/优先级队列的按序初始化
1.比如想要按照second去排序,思路一,转换成vector这种线性容器,然后利用sort函数,自定义第三个参数去做想要的排序。下面看几种写法:我拿23题做例子,你里面存pair啥都行一个道理。原创 2023-06-29 09:44:03 · 207 阅读 · 0 评论 -
为什么不提倡用vector<bool>?
因为C++没有直接去给一个bit来操作,所以用operator[]的时候,正常容器返回的应该是一个对应元素的引用,但是对于vector< bool>实际上访问的是一个"proxy reference"而不是一个"true reference",返回的是"std::vector< bool>:reference"类型的对象。vector并不是一个STL容器,不是一个STL容器,不是一个STL容器!而对于d,它的类型并不是bool,而是一个vector< bool>中的一个。原创 2023-07-03 16:34:49 · 249 阅读 · 0 评论 -
有关priority_queue+lambda的坑
我都用到了priority_queue,他默认是top返回最大的元素,我想改成top返回最小的,不过没有写仿函数,而是直接在后面写了lambda,然后出问题了。map和set(底层红黑树)要想在创建时更改排序顺序同priority_queue(底层堆),第三个参数传的是类,用lambda的时候也是类似的,要么就写个仿函数把类名传进去。对于priority_queue第三个参数要传入的是一个类,而对于sort呀这一类的算法函数,带自定义第三个参数的,人家源码传的是一个对象。我后面查了一下,在这记录一下。原创 2023-04-06 23:14:33 · 342 阅读 · 0 评论 -
有关SGI STL的alloc
在STL的使用者层面上,空间配置器一般是隐藏的,使用者不需要知道其具体实现细节即可进行使用;但是从STL的实现角度来说,由于整个STL的操作对象都存放在容器之内,而容器需要配置一定的空间来进行存放数据,因此,想要实现或者说深入了解STL的第一步便是掌握空间配置器的原理。目录主要还是说说SGI版本的STL的配置器我们知道,stl有容器,空间配置器,适配器,迭代器,仿函数以及算法这6个组件:他们之间的运行关系大概是:容器通过配置器去获得数据和存储空间,算法通过迭代器获取容器内容,仿函数可以协助算法完成不同原创 2022-12-11 19:57:36 · 889 阅读 · 4 评论 -
LeetCode 23.合并k个升序链表
看到这个题首相想到的就是暴力转化破解,思路就是把链表的所有结点值放进一个数组里面,对这个数组排序,我们可以用vector动态创建,完事之后,对数组进行从小到大的默认排序,最后遍历整个数组根据值去创建一个一个新的结点,把这些结点串在一起返回就行。都知道优先级队列底层是拿堆实现的,默认的大顶堆,每次把元素放进优先队列里,他会自动给你排序,对头就是优先级最高的那个,这里的优先级可能是大小可能是什么的,对于自定义的类型我们可以自定义他的排序方式。输入:lists = [[1,4,5],[1,3,4],[2,6]]原创 2022-10-09 14:02:54 · 1249 阅读 · 2 评论 -
大话STL第九期——仿函数(函数对象)
今天来到我们STL系列的第九期:仿函数的讲解文章目录什么是仿函数?仿函数的特点:STL仿函数的分类:谓词:内建的仿函数:算数仿函数:关系仿函数:逻辑仿函数:(不常用)什么是仿函数?仿函数作为STL六大组件中的其中一个,也称为函数对象,仿函数是一个能行使函数功能的类,仿函数的语法几乎和普通函数调用一样,不过作为仿函数的类,都必须重载operator() 运算符。仿函数的主要功能是为了搭配STL算法使用,单独使用仿函数的情况比较少。仿函原创 2022-09-07 08:25:53 · 759 阅读 · 1 评论 -
C++从0吃透string类
本篇讲解C++中string类的创建和使用,分功能举例(建议跟着文章手撸代码,方便记忆理解)欢迎订阅专栏。原创 2022-08-25 09:52:25 · 481 阅读 · 0 评论 -
大话STL第十期终章——算法
算法主要是由头文件组成是所有STL头文件中最大的一个,范围涉及到比较、交换、查找、遍历、赋值、修改等等 定义了一些模板类。用以声明函数对象体积很小,只包括几个在序列上面进行简单教学运算的模板函数。原创 2022-09-11 11:18:10 · 635 阅读 · 1 评论 -
大话STL第一期——初识相见恨晚
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。从程序员角度看,STL是由一些可适应不同需求的群集类别和一些能够在这些数据群集上运作的算法构成。STL内部的所有组件都由template构成,所以其元素可以是任意型别。STL就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。例如,vector的底层为顺序表(数组),list的底层为双向链表,deque。...原创 2022-08-10 10:48:28 · 332 阅读 · 8 评论 -
大话STL第二期——机械先驱—vector
向量(Vector)是一个封装了动态大小数组的顺序容器。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。vector 常被称为向量容器,因为该容器擅长在尾部插入或删除元素,在常量时间内就可以完成,时间复杂度为O(1);而对于在容器头部或者中部插入或删除元素,则花费时间要长一些(移动元素需要耗费时间),时间复杂度为线性阶O(n)。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。......原创 2022-08-12 10:41:11 · 545 阅读 · 2 评论 -
大话STL第三期——deque(双端队列)
deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素,也可以根据需要修改自身的容量和大小。但它又与vector不同,deque支持高效插入和删除容器的头部元素,因此也叫做双端队列。deuqe底层。...原创 2022-08-21 11:32:06 · 709 阅读 · 6 评论 -
大话STL第四期——list双向链表
list底层是一个双向链表,是环状的,所以是双向循环链表,因此不支持随机访问,但是由于它链表的特殊结构即它可以在序列已知的任何位置快速插入或删除元素(时间复杂度为O(1))。并且在 list 容器中移动元素,也比其它容器的效率高。由于链表存储方式不是连续的内存空间,故迭代器进行+i,-i操作时不一定能找到下一个结点,可能会发生内存越界的问题。因此链表list中的迭代器只支持++和--方式访问内存,属于双向迭代器使用 list 容器的缺点是,它不能像 array 和 vector 那样,通过位置直接访问元素。原创 2022-08-22 10:15:45 · 870 阅读 · 0 评论 -
大话STL第五期——set/multiset(含pair对组)
因此set容器的特性,在容器创建是内部元素自动会排序,那么如果我们想要利用set保存我们自己想要的排序顺序该如何操作呢?//set容器默认排序为从小到大,掌握如何改变排序规则//利用仿函数,可以改变排序规则//仿函数:用类调用函数//仿函数设计:public://下一行末尾加上const}*/}};it!= s1.end();it++) {}//指定排序规则为从大到小//重新指定第一步,更改第二个默认值。......原创 2022-08-23 13:56:14 · 634 阅读 · 0 评论 -
大话STL第六期——map/multimap
首先要明白映射类似于函数的对应关系,每个x对应一个y,而map是每个键对应一个值。上期我们讲到pair对组可转入观看,大话STL第五期——set/multiset(含pair对组)map 容器存储的都是 pair 对象,也就是用 pair 类模板创建的键值对。其中,各个键值对的键和值可以是任意数据类型,pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)map同set一样所有元素都会根据元素的键值自动排序(默认从小到大)优点:可以根据key值快速找到value值。...原创 2022-08-29 09:45:00 · 1999 阅读 · 0 评论 -
大话STL第七期——stack栈
要想搞清楚什么是栈,首先我们先要明白什么是容器适配器,在第一期我有讲解,这里我再简单的重复一遍。简单的理解容器适配器,其就是将不适用的序列式容器(包括 vector、deque 和 list)变得适用。即通过封装某个序列式容器,并重新组合该容器中包含的成员函数,使其满足某些特定场景的需要。容器适配器本质上还是容器,只不过此容器模板类的实现,利用了大量其它基础容器模板类中已经写好的成员函数。当然,如果必要的话,容器适配器中也可以自创新的成员函数。原创 2022-09-01 18:47:19 · 384 阅读 · 0 评论 -
大话STL第八期——queue队列
和 stack 栈容器适配器不同,queue 容器适配器有 2 个开口,其中一个开口专门用来输入数据,另一个专门用来输出数据这种存储结构最大的特点是,最先进入 queue 的元素,也可以最先从 queue 中出来,即用此容器适配器存储数据具有“先进先出(简称 "FIFO" )”的特点,因此 queue 又称为队列适配器。其实,STLqueue 容器适配器模拟的就是队列这种存储结构,因此对于任何需要用队列进行处理的序列来说,使用 queue 容器适配器都是好的选择。原创 2022-09-05 11:00:00 · 425 阅读 · 0 评论