本文主要对第五章涉及到的STL功能、常用函数、一些技巧进行总结。主要包括vector、set、map、pair、stack、queue、priority_queue、string等进行总结。
常用函数:
lower_bound(first,last,val): 返回值为:在[first,last)区间内大于或等于val的第一个元素的迭代器(如果数组的话为索引),(一般用于已经排好序的容器)。
find(first,last,val): 在[first,last)区间内等于val的迭代器(如果数组的话为索引),如果没有相等的返回指向last的迭代器。
sort(first,last):对[first,last)区间内的元素进行排序,被排序的元素必须定义了“小于”运算符。
sort(first,last,cmp):通过传入比较函数cmp(cmp为重载运算符<函数,返回值为bool)来进行排序。
vector 不定长数组
如果a为一个vector,
a.push_back():向a的尾巴增加元素。
a.pop_back():删除尾部元素。
a.size():读取它的大小。
a.resize(newsize):改变大小。可以通过改变大小的方式,等于删除多个尾部元素。
a.insert(pos,ele):pos为一个迭代器,在pos之前插入ele。
a.erase(iterator):删除迭代器指向的元素。
a.clear():清空a中的元素。
遍历方法:
for(vector<>::iterator it = a.begin();it != a.end(); it++){ *it;}
set 集合
在set中每个元素最多出现一次,并且已经排好序(从小到大),所以set中的元素必须定义了“小于”运算符。
如果x1,x2为一个set,
set<int>():生成一个空集。
set.insert(ele):插入一个元素ele到set中。
set_union(x1.begin(),x1.end(),x2.begin(),x2.end(),inserter(x,x.begin())):求x1和x2的交集,结果存在x中。
set_intersection(x1.begin(),x1.end(),x2.begin(),x2.end(),inserter(x,x.begin())):求x1和x2的并集,结果存在x中。
set遍历方法和vector一样。
map<key,value> 映射 键值对
如果a为一个map;
可以通过a[key]=value的形式进行赋值,那么也可以通过a[key]的形式进行访问。可以使用map来统计一句话中单词出现的次数等。
a.count(k) 统计key=k的数量。
map遍历方法与vector相同。
stack 栈
如果a为一个栈,
a.pop():出栈,返回值是空。
a.push(ele):ele入栈。
a.empty():返回true为空,false为非空。
a.size():返回栈大小。
a.top():返回栈顶元素。
不能进行如同vector的遍历。可以通过两个栈来进行模拟。如果要遍历栈1,从栈1pop出来压入栈2.然后遍历完后,在将栈2pop出来push到栈1.
queue 队列
如果a为一个队列,
a.pop():出队。并不会返回队首元素。
a.push(ele):ele入队。
a.front():访问队首元素。
a.back():访问队尾元素。
a.size():返回队列大小。
a.empty():返回true为空,false为非空。
遍历队列:
for (int i=0;i<a.size();i++)
{
tmp=a.front(); //取出队首元素
a.pop(); //队首元素出队
a.push(tmp); //将队首元素压入队尾
}
priority_queue 优先队列
如果a为一个优先队列,
a.top():取优先级最高的元素,也就是即将出队的元素。
声明方法:
priority_queue<int> pq:pq是一个“越小的整数优先级越低的优先队列”。
priority_queue<int,vector<int>,greater<int>> pq: pq是一个“越小的整数优先级越高的优先队列”。
priority_queue<int,vector<int>,cmp>pq:如果是自定义类型,cmp为一个结构体,在结构体要重载()运算符。如果没有cmp,则使用<运算符,进行优先级比较。比如:
struct cmp{
booloperator ()(const int a, const int b) const {
returna%10>b%10;//个位数大的,优先级反而小。
}
};
Pair 对
初始化 pair<string,string> a(“a”,”b”),
a.first():返回a的第一个值为”a”。
a.second():返回a的第二个值为”b”。
string 串
如果a为字符串,
a.length():返回字符串长度。
a.find(char,pos):查找在pos后的第一个char的位置,也可以查找字符串。
a.rfind(char):查找最后一个char的位置,也可以查找字符串
a.rfind(char,pos):查找在pos前的第一个char的位置,也可以查找字符串。
a.substr(pos,lenth):返回一个新字符串,从pos开始长度为lenth的子串。
a.empty():判断字符串是否为空。
deque 双端队列
如果a为双端队列,
a.pop_back():从队尾出队
a.pop_front():从队首出队
a.push_back():在队尾加入元素
a.push_front():在队首加入元素
参考链接:点击打开链接