欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STL

程序员文章站 2022-03-23 11:36:49
...
                            学习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);产生前一个排列。