【总结】stl(以后还会慢慢补上
总结stl的用法(啊现在还很少以后会慢慢补上的w
vector
vector是一个动态数组,在定义后他会预先开一个比较小的空间,对于push_back()操作如果数组大小不够了,会继续开一些空间。
访问位置时间复杂度O(1),加入元素时间复杂度近似O(1)
缺点:常数会比较大
常用操作
定义方式:vector
在末尾压入容器:a.push_back(x);
在末尾弹出容器:a.pop_back();
清空容器:a.clear();
查询元素个数:a.size();
首指针:a.begin();
插入元素在sit位置:a.insert(sit,x);其中sit是vector的迭代器。
调用的时候直接通过数组下标就能访问
queue
是一种先进先出的线性表,可以直接用stl中的queue
常用操作:
¢定义:queue
¢插入队尾:a.push(x);
¢删除队首:a.pop();
¢查询队尾:a.back();
¢查询队首:a.front();
¢查询长度:a.size();
¢清空只能慢慢pop。
我们可以选用一个队首指针和队尾指针来手动模拟一个队列。
stack
同queue类似,但是先进后出的线性表
常用操作
定义:stack
查询栈顶:a.top();
压入栈顶:a.push(x);
将元素从栈顶弹出:a.pop();
查询a中的元素个数:a.size();
清空只能慢慢pop。
思考:
如何用两个栈A,B模拟一个队列,并且时间复杂度尽可能好
先压入A,再将A中元素依次弹出,压入B
map
映射,把它看做一个无限大的数组。
定义方式:map<int ,int> a;
使用方式:a[x]++,cout<<a[y]等。
利用迭代器查询map里的所有二元组:
for (map<int,int>::iterator sit=a.begin(); sit!=a.end(); sit++) cout<
清空:a.clear();