信友队暑期总结
2.STL
(1)stack
后入先出(LIFO)的数据结构,默认基于 deque 实现。stack 常用于深度优先搜
索、一些字符串匹配问题以及单调栈问题。
(1)push() push(x)将x入栈,时间复杂度为O(1)。
(2)top() top()获得栈顶元素,时间复杂度为O(1)。
(3)pop() pop()用以弹出栈顶元素,时间复杂度为O(1)。
(4)empty() empty()可以检测stack是否为空,返回true为空,返回false为非空,时间复杂度为O(1)。
(5)size() size()返回stack内元素的个数,时间复杂度为O(1)。
Queue
先入先出(FIFO)的数据结构,默认基于 deque 实现。queue 常用于广度优先 搜索。
push(): 队列中是先进先出,push即在队尾插入一个元素。
pop(): 将队列中最靠前位置的元素拿掉,是没有返回值的void函数。
size(): 返回队列中元素的个数,返回值类型为unsigned int。
empty(): 判断队列是否为空,如果为空则返回1,否则返回0。
front(): 返回值为队列中的第一个元素,也就是最早、最先进入队列的元素。注意这里只是返回最早进入的元素,并没有把它剔除出队列。
back(): 返回队列中最后一个元素,也就是最晚进去的元素 。
优先队列
最大值先出的数据结构,默认基于vector实现堆结构 。它可以在O(n log n)的时间排序数组,O(log n) 的时间插入任意值,O(1) 的时间获得最大值,O(log n) 的时间删除最大值。priority_queue 常用于维护数据结构并快速获取最大或最小值 。
empty():若优先队列为空,则返回真。
pop():出队。
push():入队。
top():取堆顶(队头),返回优先队列中优先级最高的元素。
size():返回优先队列中元素的个数。
Vector
动态数组 ,是我们最常使用的数据结构之一,用于 O(1) 的随机读取。因为大部分算法的时间复杂度都会大于 O(n),因此我们经常新建 vector 来存储各种数据或中间变量。因为在尾部增删的复杂度是 O(1),我们也可以把它当作 stack 来用。
push_back(x) 在vector后面添加一个元素x
pop_back() 删除vector的尾元素
size() 获得vector中元素的个数
clear() 清空vector中的所有元素
insert(it,x) 向vector的任意迭代器it处插入一个元素x
erase(): 删除单个或一个区间内的所有元素
(5)set——迭代器访问
C ++中STL的一种关联式容器,它内部使用红黑树实现元素的有序存储。
特点:自动去重,自动排序, 快速查找插入删除元素。
insert(x) 将x插入到set容器中,并自动递增排序且去重,时间复杂度为O(logN)
find(x) 返回set中对应值为x的迭代器,时间复杂度为O(logN)
st.erase(first, last) 可以删除一个区间内的所有元素,其中first为所需删除区间的起始迭代器,last为所需要删除区间的末尾迭代器的下一个地址,也即为删除[first, last)。时间复杂度为O(last - first)。
clear() 清空set内的所有元素,复杂度为O(N)
Map
有序映射或有序表,在 set 的基础上加上映射关系,可以对每个元素 key 存一个
值 value。
size() 获得map中映射的对数,时间复杂度为O(1)
find(key) 返回键值为key的映射的迭代器,时间复杂度为O(logN)
erase(it) ①删除单个元素的迭代器 erase(it) ②删除单个元素映射的键 erase(keep)
clear() 清除map中的所有元素,时间复杂度为O(N)。