STL库学习笔记

几百年前就说要学STL了然后现在还没动呢QAQ

然后谢总发了个PPT?那就还是学习下趴qwq

首先港下有哪几个

<vector>[X]

<list>[]

<deque>[]

<set>[X]

<map>[]

<stack>[]

<queue>[]

关于vector

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

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

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

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

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

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

vector.push_back(data),从尾端加入一个data

vector.size(),返回vector的size

vector.begin() vector.end(),没什么可讲的,指向开头结尾的函数,嗷对了end指向的是结尾的后一个元素鸭!

以上几个好像是所有STL都有的基本成员函数(嗷可能语句不同但是作用都是一样的qwq)?不多说了qwq

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

vector.erase(iterator,iterator)或vector.erase(iterator),表示删一个区间里的数或这一个点上的数 因为是分块存储所以时间复杂度也是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比较方式?就字典序比较,从前往后比就是了,完

关于set

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

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

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

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

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

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

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

4)它不能直接访问下标

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

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

set.begin() set.end(),一样用法不港了

set.rbegin() set.rend(),一个很蛇皮的玩意儿,,,vector.rbegin()=--vector.end() vector.rend()=--vector.begin() 无法理解存在意义?太蛇皮了趴23333333

set.size(),基本操作,复杂度O(1)

set.empty(),同基本操作,复杂度O(1)

set.clear(),依然基本操作,不过复杂度有O(size)呢,,,

set.erase(data)或set.erase(iterator),set有个点在于它是可以删除某个值也可以删除某个下标指向的值的蛤,然后如果这个值没有出现过就直接忽略掉的蛤 复杂度O(log(size()))

set.find(data),在set中找data并返回下标,如果找不到返回set.end()

set.count(data),在set中找data出现的次数,,,这个东西在multiset中可能还有点用,在set中就有点蛇皮了,,,就相当于只是查找data出现过没有而已qwq

set.lower_bound() set.upper_bound,这个太基础不想怎么讲了呢qwq那就不讲辣w

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

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

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

count,multiset返回的是次数

没了?欧克结束qwq

关于pair

关于

猜你喜欢

转载自www.cnblogs.com/lqsukida/p/10048215.html