第五章 STL 基本概念、相关函数使用总结

本文主要对第五章涉及到的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():在队首加入元素


参考链接:点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值