~初识STL
什么是STL呢?
说得高大上一点,STL就是Standard Template Library,标准模板库。说得通俗一点,(或者说,在我的印象里)它其实就是一个“缸”,“缸”里放着好多各式各样的小容器(这些容器有list,vector,set,map等)同样的,STL也是算法和一些组件的集合。
1. 队 、栈
1.栈
栈(stack)是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示:
后进先出
举个例子:你在洗碗把洗好的碗编号为1、2、、、n依次摞起来,1号在最下面,向上编号依次增加,然后再从上到下把碗放好,这样的话,先被洗的碗,就后被放好。
2. 队
队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行
先进先出
举个例子:超市付账的时候排队,先来的先排在最前面,后来的后排在队伍最后面,付账时排在队伍前面的先付账,排在后面的后付账。
3.队 栈的用法
(1).使用队栈时所用的头文件
#include<queue>// 队列
#include<stack>//栈
(2).定义方式
stack<int> s;//参数也是数据类型,这是栈的定义方式
queue<int> q; //参数是数据类型,这是队列的定义方式
3.常用操作在这里插入代码片
栈:
s.empty()//如果栈为空返回true,否则返回false
s.size()//返回栈中元素的个数
s.pop()//删除栈顶元素但不返回其值
s.top()//返回栈顶的元素,但不删除该元素
s.push(X)//在栈顶压入新元素 ,参数X为要压入的元素
队列:
q.empty()// 如果队列为空返回true,否则返回false
q.size() // 返回队列中元素的个数
q.pop() //删除队列首元素但不返回其值
q.front() // 返回队首元素的值,但不删除该元素
q.push(X) //在队尾压入新元素 ,X为要压入的元素
q.back() //返回队列尾元素的值,但不删除该元素
例子
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
int main()
{
queue<int> q;
stack<int> s;
q.push(1);
cout<<q.empty()<<endl;
q.push(2);
cout<<q.front()<<endl;
q.pop();
cout<<q.empty()<<endl;
s.push('a');
cout<<s.top()<<endl;
s.pop('b');
cout<<s.top()<<endl;
s.pop();
cout<<s.top()<<endl;
}
4.Set
1).关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同意一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每一个元素的值都是唯一的,而且系统能根据元素的值自动进行排序(ps:它是按从小到大排序)。应该注意的是set中数元素的值不能直接被改变。
2).set常用的函数
begin() 返回set容器的第一个迭代器
end() 返回set容器的最后一个迭代器
clear() 删除set容器中的所有的元素
empty() 判断set容器是否为空
max_size() 返回set容器可能包含的元素最大个数
size() 返回当前set容器中的元素个数
erase(it) 删除迭代器指针it处元素
3).例子
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> s;
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(1);
cout<<"set 的 size 值为:"<<s.size()<<endl;
cout<<"set 的 maxsize 的值为:"<<s.max_size()<<endl;
cout<<"set 中 的第一个元素是:"<<*s.begin()<<endl;
cout<<"set 中的最后一个元素是:"<<*s.end()<<endl;
s.clear();
if(s.empty())
{
cout<<"set 为空 ! ! !"<<endl;
}
cout<<"set 的 size 值为:"<<s.size()<<endl;
cout<<"set 的 maxsize的值为:"<<s.max_size()<<endl;
return 0;
}
5.String
1).输入
#include <iostream>
#include <cstdio>
#include <cstring>//用string必须加上这个头文件
using namespace std;
int main()
{
string s1;
s1="hello";//可以直接赋值
string s2;
char s[100];
//scanf输入速度比cin快得多
//sacnf是c函数,不可以输入string
scanf("%s",s);
cout<<s1<<endl;
cout<<s2<<endl;
return 0;
}
输出结果:
abc为s数组 又赋值给了 s2 串
以下为输入常用的函数
2).基本操作
这里还有一些常见的操作
还有一个函数 s.erase (删除函数)其实它也是很方便的 它有三种参数 也就是有三种用法
6.Map
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据。它可以自动建立Key - value的对应。key 和 value可以是任意你需要的类型。
例如:
map<int, string> mapStudent;
7.Min 、Max
用法:
**min作用:取最小值 **max作用:取最大值
用法: 用法:
min(a,b) max(a,b)
-int a=1,b=2,c; -int a=1,b=2,c;
-c=min(a,b); //此时c等于1 -c=max(a,b)//此时c等于2
8.Sort
作用: 对序列进行排序
使用前提:在algorithm下使用,即添加头文件#include
用法:
数组 sort(a,a+n) [n为数组长度]
int a[10]={1,3,5,7,9,2,4,6,8,0};
sort(a,a+n);
默认由小带大排序,当然我们可以重载排序的顺序
——bool cmp(int a,int b) //在主函数外写重载排序的顺序的函数
——{return a>b;}
——sort(a,a+10,cmp); //在主函数中调用
9.Swap
作用:交换两元素的值
使用其前提:在algorithm下使用,也就是添加头文件#include
用法:
swap(a,b)
——int a=1;
——int b=2;
swap(a,b); //此时a=2,b=1
SEE YOU AGAIN!