STL小结

C++中STL是非常有利的工具,善用这些工具,不管是再ACM竞赛或者是项目开发中都有着非常简洁方便的作用。

C++官网,任何用法都可以在此查询

STL中内容丰富庞杂,要熟知每个用法着实困难,其实也无需全都知道,只要知道有那么一个工具用的时候去上面地网站查一下便知,但对于一些基本的容器必须要熟记其用法。
              容器用法
向量(vector) :连续存储的元素<vector>
列表(list) :
由节点组成的双向链表,每个结点包含着一个元素<list>
双向队列(deque) :
可以在头部也可以在尾部操作的队列<deque>
集合(set):集合 ,不允许重复值<set>
多重集合(multiset) :集合 ,允许重复值<set>
栈(stack) :后进先出的值的排列 <stack>
队列(queue) :先进先出的值的排列 <queue>
优先队列(priority_queue) :
元素的次序是升序或者降序的队列<queue>
映射(map) :由{键,值}对组成的集合,以某种作用于键对上的谓词排列 <map>
多重映射(multimap) :允许键相同但是值不同的映射 <map>


              算法<algorithm>,常用的如下:
accumulate 累加序列的所有元素
max 返回两个元素间的较大者
min 返回两个元素间的较小者 
next_permutation 依照字典顺序生成序列的下一个稍大的排列
prev_permutation 依照字典顺序生成序列的下一个稍小的排列
reverse 将给定序列反转顺序
swap 交换两个对象的值
unique 移除连续的重复元素,简称去重
lower_bound 查找第一个插入元素但不影响序列有序性的位置
upper_bound 搜索最后一个插入元素并能维持序列有序性的位置(第一个稍大于给定值的位置)
/******
Vector
变长数组,但实际上这个数组是给定了一定地界限的,一般来说不会溢出。
******/
成员函数:
c.back() 传回最后一个数据,不检查这个数据是否存在。
c.begin() 传回迭代器中的第一个数据地址。   
c.clear() 移除容器中所有数据。
c.empty() 判断容器是否为空。
c.end() // 指向迭代器中末端元素的下一个,指向一个不存在元素。
c.erase(pos) // 删除pos位置的数据,传回下一个数据的位置。
c.erase(beg,end) 删除[beg,end)区间的数据,传回下一个数据的位置。
c.front() 传回第一个数据。
c.insert(pos,elem) // 在pos位置插入一个elem拷贝,传回新数据位置
c.insert(pos,n,elem) // 在pos位置插入n个elem数据,无返回值   c.insert(pos,beg,end) // 在pos位置插入在[beg,end)区间的数据。无返回值   
c.max_size() 返回容器中最大数据的数量。   
c.pop_back() 删除最后一个数据。   
c.push_back(elem) 在尾部加入一个数据。    
c.resize(num) 重新指定队列的长度。   
c.reserve() 保留适当的容量。   
c.size() 返回容器中实际数据的个数。
/****************
   Queue  先进先出
*****************/
q.push():入队,即插入元素
q.pop():出队,即删除元素
q.front():读取队首元素
q.back():读取队尾元素
q.empty():判断队列是否为空
q.size():队列当前元素有多少,即队列长度


/***************
 Priority_queue
 ***************/
 默认从大到小排列,即大的在前小的在后,当需要从小到大排列时可传一个函数
 例如: 
 priority_queue<int, vector<int>, greater<int> >q;
  其中
       第二个参数为容器类型。
       第三个参数为比较函数。
  此外还可以自定义优先级,只要重载比较运算符,**注意重载了<运算符时>运算符并不成立必须也要重载才行!!**

用法与Queue基本一致,只是队列首元素不再是q.front()而是q.top();
/*****************
   Stack  后进先出
*****************/
s.empty() 判断栈是否为空
s.push() 在栈顶增加元素
s.top() 返回栈顶元素 
s.pop() 删除栈顶元素
s.size() 返回栈中元素数目

/***********
   Set  
***********/

Set就是一个集合的模板,相当于:{1,2,5,6,9},要求里面的元素不能重复;
而multiset集合中的元素可以重复,比如: {1,2,5,2,6,6,9}。
Set和multiset的头文件都是<set>。
Set的成员函数(multiset的成员函数与之相同):
clear() 清除所有元素
count() 返回某个值元素的个数
empty() 判断是否为空
end() 返回指向最后一个元素的迭代器
erase() 删除集合中的某个元素(若是multiset,删除会把所有相同的元素删除)
find() 查找元素是否在集合中,返回一个指向被查找到元素的迭代器
insert() 在集合中插入元素
max_size() 返回集合能容纳的元素的最大限值
size() 集合中元素的数目
swap() 交换两个集合变量
lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器
upper_bound() 返回大于某个值元素的迭代器
/*******************************
              Map 
键值默认升序,可以用数组索引的方法使用

********************************/

begin()          返回指向map头部的迭代器      
clear()         删除所有元素      
count()          返回指定元素出现的次数      
empty()          如果map为空则返回true      
end()            返回指向map末尾的迭代器      
erase()          删除一个元素      
find()           查找一个元素      
insert()         插入元素      
size()           返回map中元素的个数      
swap()            交换两个map
lower_bound()    返回键值>=给定元素的第一个位置      
upper_bound()     返回键值>给定元素的第一个位置

Ps:这里的常用容器中仅列举了一些常用的函数,具体要用时还是去根据需要去文章开头的链接网站上去查询!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值