几百年前就说要学STL了然后现在还没动呢QAQ总算还是克服了懒癌决定学下QAQ

首先港下有哪几个vector listset map stack queue,大概就这些?

然后因为有几个基本操作每个都有实在太无聊了所以单独提出来在最前面讲解一下就是了qwq之后就只是列出来告诉你有这个操作qwq

基本操作

stl.begin() 返回开头,返回iterator O(1)

stl.end() 返回尾端的下一个元素(注意是下一个鸭!),同返回iterator O(1)

stl.size() 返回它的大小 O(1)

stl.empty() 返回一个bool值判断是否为空 O(1)

stl.clear() 清空操作 O(size())

stl.erase(iterator) stl.erase(iterator,iterator) stl.erase(data) 删除某个点或某个区间(不记得左右闭开了QAQ)或某个值 O(log(size()))或O(size)

stl.rbegin() stl.rend(),一个很蛇皮的玩意儿,,,好像就stl.rbegin()=--stl.end() stl.rend()=--stl.begin() 无法理解存在意义?太蛇皮了趴2333 O(1)

stl.find(data) 找到了返回iterator找不到返回stl.end()

stl.count(data) 返回data出现了几次

stl.top()或stl.front() 返回头 O(1)

stl.back() 返回尾 O(1)

stl.pop() 删除头(加上front/back什么的也挺好理解不另外写了qwq) O(log(size()))

stl.push(data)(同上括号内) 插入data O(log(size()))

stl.lower_bound(stl.begin(),stl.end(),data) stl.upper_bound(stl.begin(),stl.end(),data) 返回iterator O(log(size()))

关于vector

vector,就是个,动态数组,和普通数组的差别好像就是没有限制大小?就可以一直加入一直加入的

通常应用于图的存边啥的?

然后介绍下迭代器iterator,话说我当初想学STL就是被这个玩意儿直接吓跑了呢QAQ

其实就是个指针,*iterator指向数值(这个可以理解为数组下标就成了?

然后vector中是可以+=k的,意味着快速转移到某个位置是资瓷的.啊还有就是它还资瓷直接访问下标的qwq

然后介绍下vector的成员函数们

vector.begin() vector.end() vector.size() vector.push_back(data)

vector.insert(iterator,data),表示在iterator指针前加入一个数值 然后因为vector是分块存储的,所以时间复杂度是O(log(size()))的,比普通的数组就会快些

vector.clear(),这个有个要注意的是,此处的clear并不意味着真的把所有元素清空然后释放内存,它只是把size清空了而已,能懂?举个栗子趴再,就比如我有个vector<int>={1,2,3},clear之后,如果for(to size),是不会有输出的,但是如果我直接写的for(to 3)就会输出"1,2,3" 所以它是O(1)的

vector.remove(iterator,iterator,data),表示把这一段区间的值不是data的按顺序提到前面去,并返回不是data的最后一位的后一位(好像是后一位?PPT的表述我没太懂QAQ) 然后注意一下就是remove和erase结合使用更佳,他们放一块的话就可以做到把vector中所有数值为data的删掉的操作,懂?

然后有几个能用但不是成员函数的东西也港下qwq

一个是sort,对vector也是有用的,用法差不多,不多讲了qwq

然后reverse,翻转操作,也能用,也差不多不多讲了qwq(,,,话说我怕是还要开个函数总结?其实reverse的用法我只知道个大概具体怎么搞也不清楚啊QAQ

最后港下vector比较方式?就字典序比较,从前往后比就是了

习题

1)谁的孙子最多IⅡ(...名字好蛇皮啊2333333其实就是树相关的操作 [ ]

2)链表操作 [ ]

3)数组操作 [ ]

4)排序 [ ]

5)序列翻转 [ ]

关于set&multiset

set是个好东西鸭!大概港下嗷qwq

它封装了个贼高级的数据结构,叫红黑树,也就是,平衡检索二叉树

简单来说就是它可以自动排序,并且它的所有操作(插入删除查找)都是O(log(size()))的,所以跑起来挺快,虽然有点儿常数趴,但是开个O2效率就挺高了

然后关于set先说说几点注意事项

1)它不能有重复元素,如果要重复元素请移步multiset,听说用法差不多qwq

2)它不能直接修改内部的元素的值

3)它的iterator只能++--不能+=k,意味着只能一步步挪不能一下跳到某个位置QAQ

4)它不能直接访问下标

好dei注意事项港完就开始港成员函数了

set.size() set.empty() set.clear() set.erase()(O(log(size()))呢)

set.insert(data),在set中插入data,值得注意的是它会先检索一遍是不是已经存在data了如果是就不会插入了qwq(因为,set里没有重复元素呢qwq)

讲完了?最后说下set和multiset区别蛤

就几个成员函数的实现有点区别?

erase,multiset会把所有=data都删了

count,multiset返回的是次数,set只是蛇皮地告诉你一下它出现过没有

没了?欧克结束qwq

习题

1)random [ ]

2)sumx [ ]

3)dec [ ]

4)high card low card [ ]

关于pair

这个我会的,知识点也不多随手写几句就溜了qwq

就是个二元组,然后排序的时候是以first为第一关键字second为第二关键字的

没了?

习题

1)买蛋糕2 [ ]

关于map&multimap

map一般是用来hash啥的?它可以建立一一对应关系嘛,就是map<key,value>

然后它也有棵红黑树,可以根据key自动排序,所以你如果要查找key,是O(1)的,但是查找value的时候复杂度不怎么好看了qwq

还有就是map也不资瓷重复元素的哦qwq但是multimap资瓷qwq

然后,map的iterator也只资瓷++--,+=k不欧克哦QAQ

然后没什么好说的?直接上来讲成员函数了蛤

因为懒得打了,此处define mp make_pair

map.begin() map.end() map.empty() map.clear() map.erase()(O(size())呢)

map.insert(mp(key,value)),插入某个元素,你也可以直接用数组赋值的方式,map[key]=value 区别在于如果本来就有key值了,insert相当于没有意义的,直接赋值相当于覆盖掉原来的key值 复杂度都是O(log(size()))好像?

iterator->first iterator->second,因为map比较特殊所以港下,first就是key,second就是value

map.find(data),需要注意的是它找到是key鸭qwq

map.lower_bound() map.upper_bound,注意一下的是它也查找的是key

说下multimap和map区别

可以类比set和multiset,同样的multimap可以一个key值对应多个value,根据插入时间排序

然后还有就是不能用数组赋值了只资瓷insert

然后find返回的是第一个元素的迭代器

还有就count也差不多

还有个比较特殊的,其实map也有但没什么意义所以没讲的,函数,equal_range(x),返回的是pair(左闭右开的x区间的俩iterator),不过这个也可以用lower_bound+upper_bound实现qwq

习题

1)count [ ]

2)drawer [ ]

3)exclusive [ ]

4)match [ ]

5)game [ ]

6)double [ ]

关于queue

没什么可讲的,作用好像也不是很大×可以轻而易举地被vector替代感觉?说下成员函数就溜了我qwq

queue.size() queue.empty() queue.pop() queue.front() queue.back() queue.push(data)

queue.emplace(data),和push一样,好蛇皮啊,,,为什么一个作用要开俩函数???

queue1.swap(queue2),交换俩队列的元素,其实并不会真正使用拷贝形式进行交换,只是交换底层的数据结构

swap(queue1,queue2),太蛇皮了,和上面那个意义一样,为什么要搞俩?

关于deque

deque,就是个,双端队列,就是说可以从头插入也可以从尾插入

先对比一下deque和vector

vector通常来说常数较小,但从头插入从头删除的话只能用insert erase复杂度较高

deque常数大一些,但是它从头插入也是O(1)的复杂度就低些

总的来说如果要频繁在头搞事就用deque

不然就用vector

然后说下关于deque的几点

1)deque用[]实在肥肠方便,只有在erase和insert的时候用下iterator就好了

2)关于deque的构造,因为这个构造有点奇葩所以拎出来说下,就是你可以定义成deque<int>cjk(5),表示这个deque初始有5个0.然后还有个挺逗的,就是假如我定义了俩 deque<int>cjk(5);deque<int>goldgenius(3),就是说一个有5个0一个有3个0,然后我们可以直接赋值,cjk=goldgenius,这样就变成都只有3个0了.其实挺无聊的但就是蜜汁戳我笑点?感觉好逗啊2333333

然后就介绍下成员函数qwq

首先说下

哦这里还是解释下这个蛇皮的(size)有什么用?就是说这样的话你就是已经开了size的空间,对这些你就可以用[]修改,还有就是它会影响到push,没了

好不扯淡了真滴开始港成员函数哦qwq

deque.empty() deque.size() deque.begin() deque.end() deque.clear() deque.front() deque.back() deque.push_front() deque.push_back deque.pop_front() deque.pop_back()

应用

1)单调队列 [ ]

习题

1)滑动窗口 [ ]

2)advertisement [ ] (找不到原题oj所以用的一个相似的题目QAQ

3)最大全1子矩阵 [ ]

关于priority_queue

就是个封装的堆呢qwq

然后因为之前学dij的时候学过了大概都回了就不详细讲解了qwq

priority_queue.push(data) priority_queue.pop(data) priority_queue.top(data) priority_queue.empty() priority_queue.size()

注意一下就队列没有clear,可以自己手写一下(就empty+pop就完成了嘛qwq) 然后都是O(size())的呢

习题

1)懒羊羊吃草 [ ]

2)合并果子 [ ]

3)丑数 [ ]

4)blackbox [ ]

关于stack

关于list

然后我发现好多习题找不到...所以我就专门写了个博客记录了下题面qwq

当然题目肯定也做不成,打打代码就算了QAQ

update:

知道了一个unordered系列!

好像有unordered_map unordered_set等?先mk一下,,,没有时间落实了辣QAQ如果按俩考一落实的模式来说的话大概后天是有时间的?先随便mk一个网址趴QAQ

——19.1.21

最新文章

  1. java分享第十四天(TestNG Assert详解)
  2. 高级Java研发工程师面试题总结
  3. PL/SQL之--触发器
  4. OC的@property 和 @synthesize id
  5. 开发程序过程中遇到的调用Web Api小问题
  6. C++ Dialog Box Command IDs
  7. Linux LVM 扩展磁盘分区
  8. 操作html标签之找到标签(续)
  9. Strategic game(POJ 1463 树形DP)
  10. apache 日志中记录代理IP以及真实客户端IP
  11. Humming Bird A20 SPI2驱动编译
  12. TypeConverter的使用
  13. C#中的基元类型、值类型和引用类型
  14. Log4j日志框架学习零到壹(一)
  15. Git命令参考手册
  16. Ubuntu环境下TensorBoard 可视化 不显示数据问题 No scalar data was found...(作者亲测有效)(转)
  17. Chrome插件 postman的使用方法详解!最全面的教程
  18. 测试RemObjects Pascal Script
  19. root用户Linux 环境变量的配置解决(-bash: jps: command not found)有关问题
  20. Android 在一个程序中启动另一个程序(包名,或者类名)

热门文章

  1. Oracle第一步
  2. 一些ES5的操作数组的方法
  3. struts2学习笔记之十:文件上传
  4. Linux文件结构及基本文件夹
  5. 把int放在一个char数组里(用于处理每一位数字)
  6. LabelMe图像数据集下载
  7. 关于javascript中的 执行上下文和对象变量
  8. [windows phone开发]新生助手的开发过程与体会三
  9. kettle中Get Data from XML , Jason Input , 文本文件输入 使用示例
  10. 读&amp;lt;大数据日知录:架构与算法&amp;gt;有感
  11. 数据结构——二叉树(Binary Trees)
  12. vuex脑图
  13. 软件开发者路线图梗概&amp;书摘chapter5
  14. iOS---------如何搭建ipv6环境
  15. Ext.net GridPanel锁定列需要注意的几个问题
  16. Chap3:区块链的衍生技术[《区块链中文词典》维京&amp;甲子]
  17. IDEA教程之导入maven项目
  18. VC中C++数值范围的确定
  19. Linux系统磁盘与分区管理(7)
  20. Java8简明指南