1.stack
头文件<stack>
using name space std;
定义:stack< typeName > name;
方法:top()访问栈顶元素
push(x)
pop()
empty()检测stack是否为空,空返回true
size()返回元素个数
主要:使用top()或者pop()是先用empty()
2.queue
头文件<queue>
using name space std;
定义:queue< namespace > name;
方法:front(),back()访问队首或队尾
push(x),pop(),empty(),size()
注意:使用front()和pop()之前必须用empty()判断队列是否为空
扩展:priority_queue< typename > name;
除了front()和back(),其他queue有它就有
优先级设置:priority_queue< int,vector<int>,less<int> >q;//默认数字大优先
如何想数字小优先级高,把less换成greater
3.vector变长数组
头文件:<vector>
using namespace std;
定义:vector< typename > name;
和数组一样,可以通过下标访问,也可以通过迭代器访问(类似于指针)
vector<typename>::iteration it;
初始化后可以用*it访问数组的元素了。
迭代器可以++it或者it++,在vector中it还可以加上一个常数。
begin()方法返回第一个元素的位置,end()返回最后一个元素的下一个元素的位置(外国人习惯左闭右开)
it = vi.begin();
那么vi[i]和*(vi.begin()+i)是等价的
方法:push_back(x)在最后一个元素后加一个元素x,pop_back()删除最后一个元素,size(),clear(),insert(it,x)把x插入it所指向的位置,erase(it),erase(first,last)删除[first,last)
4.algorithm头文件下的常用函数
using namespace std;
(1)max(x1,x2)和min(x1,x2)参数必须是两个,可以是浮点数,参数多的话就嵌套多用几次。
(2)abs(x)中x必须为整形,浮点型则可以使用math中的fabs。
(3)swap(x,y)交换两个值
(4)reverse(it,it2)可以将数组指针在[it,it2)间的元素或容器的迭代器在同一范围内的元素进行反转。
(5)fill(it,it2,x)把数组或容器某一段都赋值为x
(6)sort(首元素地址(必填),尾元素地址的下一个地址(必填),比较函数(非必填) );
不填比较函数则默认递增排序,char则为字典排序。
如果想改变排序,则需提供cmp函数,比如 book cmp(int a,int b) {
return a > b; }
结构体也可定义cmp,进行排序。而对于容器只有vector、string、deque可以使用sort。