STL
学习stl的理解
这个周的两次学习acm选修课,老师讲完了c++中的stl的基本用法与几个例题。stl在网上说的是建立在泛型编程之上的,提供了六大组件:容器、算法、迭代器、仿函数、适配器、配置器。其中后三个没有听说过,只是学习到了前三个。
容器:装东西的东西,装水的杯子,装水的大海等等吧,stl里的容器是可容纳一些数据的模板吧。
而迭代器呢,就像往杯子里倒水的水壶,其实我理解为遍历容器中数据的对象。对存储于容器中的数据进行处理时,迭代器能从一个成员移向另一个成员。他能按预先定义的顺序在容器中的成员间移动。对普通的一维数组、向量、双端队列和列表来说,迭代器是一种指针。起到遍历的作用吧。
算法:stl刚才说了不是容器嘛,算法就是处理容器中数据的方法和操作。
下面来回想与复习一下stl中的内容。
1、stack栈(先进后出,像生活中的死胡同)
s.push(i);//入栈
s.pop();//弹出栈顶元素
int tmp = s.top();//获取栈顶元素
2、queue队列(先进先出,食堂排队买饭)
q.push(i);//入队
q.pop();//出列
int tmp = q.front();//获取对头元素
3、优先级队列priority_queue
按照值的大小放在队头、队尾
最大值优先级队列、最小值优先级队列。
priority_queue p1;等同于priority_queue<int, vector, less > p2;//最大值优先级队列
注:优先级高的排在前面,但并不是线性排列,是一种二叉树排列,当树顶的元素消失以后,并不是其下的元素来顶上,而是排在最末尾的元素移到树顶。
priority_queue<int, vector, greater> p3;//最小值优先级队列
4、set ,multiset
set是一个集合容器,所包含的元素是唯一的,集合中的元素是按照一定的顺序排列(默认情况下是从小到大)自动的将元素排序,有去重的功能,multiset允许元素重复。
5、map、multimap
他们是关联式容器,一个map是一个键值对序列,即(key,value)对。他提供基于key的快速索引能力。
key是唯一的,元素是按照一定的顺序排列的。
multimap唯一的区别是相同键可以出现多次,而map每个键只能够出现一次。map支持map[key]=value,而multimap不支持[]操作符。
6、vector容器与iterator迭代器
#include〈victor〉
void main()
{
vector v;//定义vector容器
for(vector::iterator it = v.begin(); it != v.end(); it ++)//定义迭代器it(指针)
{
cout << *it <<" ";
}
}
7、upper_bound与lower_bound
upper_bound(begin,end,value);返回大于value的第一个位置。
lower_bound(begin,end,value);返回大于等于value的第一个位置。
注意end都是最后一个元素的下一个位置。
8、生成排列
头文件:algorithm
bool next_ permutation(begin,end);改变区间元素的顺序,产生下一个排列。
bool prew_ permutation(begin,end);产生前一个排列。
上一篇: POJ 2825
下一篇: 京东2021数据分析岗笔试编程题