经过这段时间的学习我对STL也有了大体的了解,接下来就要经过大量的训练来进一步扎实STL的运用。下面我就对最近学习的知识进行总结。
一、 栈(stack)
定义:只有一个出口,先进后出。
头文件:#include
如:stacks;
使用:
empty()—返回bool类型,用来判断是否为空(s.empty())
size()—返回元素个数(s.size())
top()—返回栈顶元素(s.top())
pop()—移除栈顶元素(s.pop())
push()—加入一个元素a(s.push(a))
二、队列(queue)
定义:有两个出口,先进先出,排队模型。
头文件:#include
如:queues;
使用:
同上:empty()、size()、push()、pop()删除排头第一个元素
front()—返回queue内的下一个元素
back()—返回最后一个元素
三、vector应用
头文件:#include
如:vectors;
使用:
同上:empty()、size()
push_back(a)—将a元素插入最末尾
pop_back()—将最末尾元素删除
s[i]类似数组
四、sort应用
定义:默认从小到大排序
头文件:#include
sort(begin,end);
sort(begin,end,cmp);
如:int num[]={1,6,3,9,5}
(一)
sort(num,num+5);——{1,3,5,6,9}
(二)
从大到小
bool cmp(int
a,int b){
return a>b;
}
sort(num,num+5,cmp);——{9,6,5,3,1}
或者sort(num,num+5,greater())
五、upper_bound和lower_bound
upper_bound(begin,end,value)返回>value的元素的第一的位置
Iower_bound(begin,end,value)返回>=value的第一个位置
六、set和multiset
头文件:#include
如:sets;默认从小到大排序
自定义排序:
struct
new_type{
int x,y;
bool operator
< (const new_type &a)const{
if(x!=a.x)
return x<a.x;
return
y<a.y;
}
}
set<new_type>s;
应用:
s.insert(a)—插入新元素a,返回新元素位置。
s.erase(a)—移除与a元素相同的所有元素,并返回被移除的个数。
s.erase(pos)—移除迭代器pos所指位置的元素,无返回值。
s.clear()—移除所有的元素
s.find(a)在容器中查找a元素并返回其地址
同上:s.size()、s.empty()
s.count(a)–返回a元素的个数
s.upper_bound(value)—返回元素值>value的元素的第一的位置
s.Iower_bound(value)–返回元素值>=value的第一个位置
s.begin()—返回一个双向迭代器,指向第一个元素
s.end()—返回一个双向迭代器,指向最后一个元素的下一个元素
迭代器:
muitiset::iterator pos;
for(pos=s.begin();pos!=s.end();pos++)
七、map与multimap
头文件:#include
s.top()返回优先队列的下一个元素
s.pop()移除下一个元素
相同:s.size、s.empty()
自定义排序
#define pow2(a) (a*a)
#define dist2(x,y) (pow2(x)+pow2(y))
struct cood{
Int x,y;
const bool operator < (const cood &b)const{
return (dist2(x,y) < dist2(x,y))
}
}