五一 DAY 6
五一 DAY 6

TypeName 类型名
VariableName 变量名


Part 1 数据结构

函数库:# include < utility >
Pair 定义一个变量,它有两个元素 :pair.first pair.scecond,
这两个元素的类型可以不同
(类似于结构体)





函数库:#include < string >
定义一个字符串



a = qing bei b = xue tang
a+b = qing bei zao tang





//超过内存限制!
所以就用到了vector


Vector 原理: 倍长
Vector的内存长度是2n ,内存是连续的
演示过程
读入过程:

取数过程:



迭代器返回的是(下标),不是对应值

在指针上加*,得到值

支持自增运算

遍历 vector :



STL 要求 set 必须有序

Set类型可以定义为任何可以排序的类型

Set 的底层使用红黑树这个数据结构来维护集合。
( 一种很麻烦的平衡树,
平衡的树结构
每个节点左右子树节点数差不多

)

返回的大部分是迭代器
set具有鲁棒性
内存不连续



双向迭代器(建议百度)
常见操作:




set 不会出现 1 2 2 3 3 4 只能是1 2 3 4
multiset 可以 1 2 2 3 3 4

比如:1 2 2 3 3 4
我们删除 2 就变为: 1 3 3 4
想只删一个数字,就删去它他的迭代器


一维数组一定不会支持这种操作,一维数组的下标只能是数字
然鹅 map可以实现

把第一维度作为下标,值是第二维 ,第一维度必须可排序




栈 [ FILO ] first in last out


队列 [ FIFO ] first in first out


优先队列 本质是大根堆




要做小根堆怎么办??


注意:
1.大于比较 小根堆 (小于比较 大根堆)
2.
第一个 int 是priority_queue的类型
第二个 vector<int> 是存储数据的结构 一般用vector
第三个 cmp 是比较函数
3.Priority Queue 重载 < 运算符
Cmp 重载()运算符
Map 重载[ ]
4.
等价于
5.优先队列比 set 慢
Part 2 Algorithm(函数)
左闭右开


![]()
按照输入的顺序倒序输出


Unique
对已经拍好顺序的数组去重


![]()


找到a的下一个排列

(是否还能找到下一个排列)

所以可以实现全排列QVQ
比较次数不会超过 。。han ning ju li
Fill函数可以赋值任何数
可以作为memset的替换
但是没有memset快
![]()


O(n)


左闭右开


4 放到该放位置,比它小的在前,比它大的在后,但不保证顺序

随机重排

随机种子

实现得到随机排列
下午考试:
五一 考试二
暴力出奇迹!!!rank 4!!!
扩充知识:







析构:释放内存
构造函数:

类名
操作
赋值构造函数







IN THE END
咳咳咳你看这个网站它又大又圆
http://www.cplusplus.com/reference/vector/vector/?kw=vector

浙公网安备 33010602011771号