vector
变长数组,顺序存储结构,支持随机访问
export: vector
定义:
vector<int> a;
vector<vector<int>> a(n, vector<int>(m, 0)); // 定义nxm二维数组
支持操作:
访问:front(), back()
插入:push_back()
删除: pop_back()
其他: size(), empty(), clear() // 后续stl都具有这些方法,不再重复
NOTE:vector是变长数组,顺序存储方式,只支持尾部插入和删除(因此vector可以当stack用)
queue
export:queue(循环队列), priority_queue(优先队列)
定义:
queue<int> q;
priority_queue<int> q; // 大根堆
priority_queue<int, vector<int>; greater<int>> q; // 小根堆
// greater<int>(a, b) return true when a > b
priority_queue<pair<int, int>> q;
循环队列queue支持操作
访问:front(), back()
插入:push() // 从队尾插入
删除:pop() // 从队头弹出
土制queue:
int q[N], hh = 0, tt = -1; // hh指向队头元素,tt指向队尾元素
tt >= hh: 表示不为空
int t = q[hh++]; // 从队头取出元素
q[++tt] = x; // 向队尾插入元素
优先队列priority_queue支持操作
访问:top() // 查询根
插入:push()
删除:pop()
stack
支持操作:
访问:top()
插入:push()
删除:pop()
土制stack:
int stk[N], top = 0; // top指向栈顶元素
if (top > 0) 栈不为空
int t = stk[top--]; // 取出栈顶元素
stk[++top] = x; // 将元素加入栈顶
deque
双端队列,同时具有栈和队列的特点
支持操作:
访问:front(), back()
插入:push_front(), push_back()
删除:pop_front(), pop_back()
list
链表:链式存储结构,实现为双端链表,可以作为集合使用,并维护了元素的前后间信息,一般不常用
支持操作:
查询:只支持遍历查询 for (auto it = li.begin(); *it != target; it++);
插入:insert(x), push_front(x), push_back(x)
删除: pop_front(x), pop_back(x), erase(it)
set
集合,红黑树实现,复杂度logn,包含set和multiset,前者元素不能重合,后者元素允许重合
export: set, mutiset
支持操作:
查询:find(x) // 返回对应元素的迭代器,否则返回s.end()
查询:count(x) // 返回对应元素的个数(对于set只有0/1,而对multiset更有意义)
插入:insert(x)
删除:erase(it) // 参数是迭代器
NOTE:<unordered_set>实现为哈希表,方法与<set>相同
map
映射,红黑树实现,复杂度logn
定义:
map<long, long, bool> vis;
map<string, int> hash;
map<pair<int, int>, vector<int>> test;
map<vector<int>, bool> st;
支持操作:
查询:find(x) or m[x]
插入:insert(x) or m[x] = y
删除:erase(it)
NOTE: <unordered_map>实现为哈希表,方法与<map>相同