1,vector:
vector是STL的动态数组,在运行是能够根据需要改变数组大小。由于它是以数组的形式存储的,所以它的内存空间是连续的。在中间进行插入和删除操作会造成内存快的复制,另外数组后面的内存空间不够也需要重新申请一块足够大的内存,这些都会影响vector的效率。
例子 | 说明 |
---|---|
vector< int > | 初始化a为空 |
a.push-back(100) | 在尾部添加元素 |
a.size() | a的元素个数 |
a.empty() | 判断a是否为空 |
reverse(a.begin(),a.end()) | 用函数reverse()翻转数组 |
sort(a.begin(),a.end()) | 用函数sort()从小到大排序 |
stack(栈)
栈是基本的数据结构之一,特点是“先进后出”。头文件#include< stack >.
用法
例子 | 说明 |
---|---|
stack< Type> s; | 定义栈,Type为数据类型 |
s.push(item) | 把item放入栈顶 |
s.top() | 返回但不删除栈顶元素 |
s.pop() | 删除栈顶元素 |
s.size() | 返回栈中元素的个数 |
s.empty() | 判断栈是否为空 |
queue(队列)
队列的特点是先进先出,头文件为:#include< queue>
用法:
例子 | 说明 |
---|---|
queue< type > | 定义队列,type为数据类型 |
q.push(item) | 把item放进队列 |
q.front() | 返回但不删除队首元素 |
q.pop() | 删除队首元素 |
q.bach() | 返回队尾元素 |
q.size() | 返回队列元素个数 |
q.empty() | 判断队列是否为空 |
priority_queue(优先队列)
每次push和pop操作,优先队列都会动态调整,把优先级高的元素放在前面。 在STL中优先队列是用二叉堆来实现的,在队列中push一个数或pop一个数的时间复杂度都是O(log n)的
用法
例子 | 说明 |
---|---|
q.top() | 返回具有最高优先级的元素值 |
q.pop() | 删除最高优先级元素 |
q.push(item) | 插入一个新元素 |
Set(集合)
STL中的set是用二叉搜索树实现的,集合中的每个元素只能出现一次,并且是排好序的。访问元素的时间复杂度是O(log n)的。
用法
例子 | 说明 |
---|---|
set< type> a | 定义 |
a.insert(item) | 把item放进a里 |
a.erase(item) | 删除元素item |
a.clear() | 清空set |
a.empty() | 判断是否为空 |
a.size() | 返回元素个数 |
a.find(k) | 返回一个迭代器,指向k值 |
a.lower_bound(k) | 返回一个迭代器,指向不小于k的第一个元素 |
a.upper_bound() | 返回一个迭代器,返回大于k的第一个元素 |