先要有一个指针:iterator
用法:
定义指针: vector<int>::iterator a ps:定义一个存放int的容器指针 a
queue<int>::iterator b ps:定义一个存放int的队列指针 b
输出相应值: cout<<*a cout<<*b;
vector:
定义: vector<int>v;
大小: v.size() ps:返回个数
加数: v.push_back( x ) ps:在队尾加入x(从0开始)
是否为空:v.empty() ps:如果为空,返回 false
插入元素:v.insert(v.begin()+i, x ) ps:在第i+1个元素前插入x
删除元素:v.erase(v.begin()+3 ) ps:删除第4个元素
删除区间:v.erase(v.begin()+2,v.begin()+7) ps:删除第3到第7个元素
清空: v.clear()
queue:
定义: queue<int>q
大小: q.size()
加数: q.push() ps:注意是push
是否为空:q.empty()
出队: q.pop()
问队首: q.front()
问队尾: q.back()
子函数:
priority_queue<int>a ps:只能重载运算符”<“,函数内部用”<“比较
stack:
定义: stack<int>s;
大小: s.size()
入栈: s.push()
出栈: s.pop()
栈顶: s.top()
是否为空: s.empty()
sort:
子函数:
按cmp对a到b排序 sort(a,b,cmp)
按cmp对a到b稳定排序 stable_sort(a,b,cmp);
map:
定义: map<int,int>m;
求插了多少东西: m.size();
清空: m.clear();
删除一个: m.erase('a') ps:删除‘a’对应键值
是否为空: m.empty()
是否存在: m.count() ps:操作过就输出1,没数就输出0;
子函数:
以空间换时间o(1)查询 hash_map
pair:
注:可于map配套使用 map<pair<int,int>,int>m
定义: pair<int,int>p;
配对: p=make_pair(a,b); ps:a、b配对,信息传给p
访问: p.first() p.second() ps:一个访问a、一个访问b
unique:
去重: iter=unique(v.begin(),v.end()) ps:只能对容器使用,返回指针
set:
定义: set<int>s
加入: s.insert( x )
查找: s.find( x ) ps:找到:返回位置;没找到:返回end()
删除: s.erase( x )
multiset:
定义: multiset<int>mu
加入: mu.insert( x )
数量: mu.count( x ) ps:返回个数
查找: mu.find( x ) ps:返回第一个位置
删除所有: mu.erase( x )
删除: if(multiset<int>::operator it=mu.find(x)!=mu.end())mu.erase(it);
bitset:
定义: bitset<n>b ps:定义一个二进制位为n位的数b,初值0赋值 :1、bitset<n>b(str ,j,i) ps:把一个二进制字符串str从右往左第i个到第j个赋给b
2、bitset<n>b(a) ps:把一个数字a的二进制位从右往左第1个到第n个赋给b
有没有1: b.none() ps:如果有1返回0,没有1返回1
计1的个数: b.count() ps:返回1的个数
计位数: b.size() ps:返回b的位数
全部取反: b.flip()
单个取反: b.flip(pos) ps:从右往左第pos位取反
求第几位: b.operator[](pos) ps:返回从右往左第pos位
清1: b.set()
单点清1: b.set(pos)
清0: b.reset()
单点清0: b.reset(pos)
第i位是否是1: b.test(pos) ps:是1返回1;
杂项
折半排序 : nth_element(a+l,a+k,a+r+1,cmp)
ps:从l找到r,按cmp标准找第k大,把比他小的放左边,比他大的放右边;;