STL课程记录
/*
vector: 变长数组,倍增的思想
vector[HTML_REMOVED] a(10,3) 定义一个vector a,里面有10个数,每个都是3;
size():返回元素个数
empty():返回是否为空
clear():清空
front/back():返回第一个数/最后一个数
push_back/pop_back():向最后插入/删除一个数
begin/end():迭代器,第0个数/最后一个数的后面一个数
[]
pair[HTML_REMOVED]:二元组
pair[HTML_REMOVED] p //定义方式
first :第一个元素
second : 第二个元素
支持比较运算,以first为第一关键字,second为第二关键字(按字典序比较)
string: 字符串,substr(),c_str()
size()
empty()
clear()
substr(1,2):从下标1开始,返回两个字符
c_str():返回字符串的起始地址
queue:队列;push(),pop(),front()
push() 向队尾插入一个元素
front() 返回队头元素
back() 返回队尾元素
pop() 弹出队头元素 //先进先出
priority_queue: 优先队列(堆)默认是大根堆;
prtiority_queue[HTML_REMOVED] heap;
push() 插入一个元素
top() 返回堆顶元素
pop() 弹出队头元素
stack:栈;push(),pop(),top()
push() 向栈顶插入一个元素
pop() 弹出栈顶元素
top() 返回栈顶元素
deque:双端队列
size()
empty()
clear()
front() 返回第一个元素
back()
push_back/pop_back()
push_front/pop_front()
begin()/end()
[]//支持随机寻址
set,map,multimap,multiset:基于平衡二叉树(红黑树),动态维护有序序列
set[HTML_REMOVED] S;multiset[HTML_REMOVED] S;
set/multiset : set不能插入同一个数,multiset可以插入同一个数
insert() 插入一个数
find()查找一个数
count() 返回某一个数个数
erase():1.输入一个数x,删除所有x O(k + log n)
2.输入是一个迭代器,删除这个迭代器
lower_bound()返回大于等于x的最小的迭代器
upper_bound() 返回大于x的最小的迭代器
map/multimap: map<string,int> a; a["ql"] = 1;//把string映射到int
insert() 插入的数是一个pair
erase() 输入的参数是pair或者迭代器
find()
[] 时间复杂度是O(logn)
lower_bound()返回大于等于x的最小的迭代器
upper_bound() 返回大于x的最小的迭代器
unordered_set,unordered_map,unordered_multiset,unordered_multimap: 哈希表
和上面类似,增删改查的时间复杂度是O(1)
不支持 lower_bound(),upper_bound()
bitset:压位
bitset<10000> S;
~(取反),&,|,^(异或)
>>,<<
==,!=
[] //取某一位
count() 返回有多少个1
any() 判断是否至少有一个1
none() 判断是否全为0
srt()把所有位置成1
set(k,v) 把第k位变成v
reset()所有为变成0
flip() 等价于~
flip(k)第k位取反
系统为某一程序分配空间是,所需时间,与空间大小无关,与申请次数有关
*/