STL(暑期笔记)


sort(排序)

sort(a,a+n)//[a,a+n)升序排序,默认从小到大
greater()//从大到小:sort(a,a+n,greater())
less()//从小到大

vector(可变数组)

vector<数据类型>s//一种顺序容器,可看作数组,是长度可变的动态数组,它的储存空间根据数据多少自动分配
成员函数: s.xxx
(1)push_back(n)
将n压入数组中,是在末尾新增,是动态分配的内存空间,按1,2,4,8,16 …倍增分派空间,当前空间不够时,可能会在新的地方分配新的空间,将数据复制到新空间,数据规模较大时耗时多
(2)erase()//删除,可一个可多个(左闭右开)
(3)begin()//指向第一个位置
(4)end()//指向最后一位的下一位
(5)size()//返回数据元素个数
(6)resize(n)//重设数据元素为n个,n>当前元素个数,则新增元素用默认值初始化,否则,则多余的舍弃
(7)clear()//清空当前的vector
(8)rbegin()//指向最后一位,要定义一个逆向访问迭代器,vector::reverse_iterator it
(9)rend()//指向第一个位置的前一位,逆向访问的结束位置
(10)empty()//判断是否为空,是则返回true;
(11)insert()//插入一个元素如:
c.insert(pos,elem)//在迭代器pos指向元素前插入elem
c.insert(pos,ncount,elem)//在迭代器pos指向元素前插入ncount个elem
c.insert(pos,first,end)//在迭代器pos指向元素前插入区间[first,end)的 元素
(12)reverse(c.begin(),c.end())//将数组倒过来

vectora//Node为自定义的结构体

定义时初始化:
(1)vectora(10)//定义初始大小为10个元素的vector,初始值为0;
(2)vectora(10,2)//定义初始大小为10个元素的vector,初始值为2;
定义时用数组初始化:
int b[10]={1,2,3,4,5,6,9,10,12,32};
vectora(b+1,b+8)//参数为迭代器,数组元素就是其地址(2,3,4,5,6,9,12)

vector数组:
vectora[100]//相当于二维数组

字符串可能有空格时输入:getcline(cin,str[i]);

pair

pair<数据类型,数据类型>s//生成一个包含两个变量的结构体,成员变量名为first和second;
(1)pair<string,int>p;
p.first=“JSOI”;
p.second=2018;
(2)pair<int,int>p(12,23);
当含有float类型的时候:p=make_pair<int,float>(1,1,1)

set

set//去重和排序元素唯一性,查询速度快,内部元素不按顺序存放,只能用迭代器访问
成员函数:
(1)insert(n)//若不重复则将n插入数组中,否则不插,同时生成一个pair,其中first是实数,sceond是bool型表示是否插入成功
(2)count(key)//返回key的数量,1或0,表示是否存在
(3)find(key)//返回指向key的迭代器,不存在则返回end()
(4)clear()//同vector
(5)empty()//同vector
(6)lower_bound(key)//返回首个不小于key的元素的迭代器,当key存在,返回指向key的迭代器,不存在则返回首个大于key的迭代器;若大于key的也不存在,返回end()
(7)upper_bound(key)//返回首个大于key的迭代器,不存在则返回end()
(8)erase(): s.erase(2),s.erase(2,5)左闭右开删【2,5)

map

map//STL提供的专门处理映射关系的容器(映射:一对一关系),关联容器
map的数据元素是pair类型,其中first称为关键字,每个关键字只出现一次,second为该关键字的对应的值,它们可以是任意类型
first不能修改
second可以修改;
map中的元素根据first的大小排好序,每当插入或删除时都会重新排序;
1·map定义:
map< , >p
2·数据插入:
(1)用insert插入pair类型数据(3种)
1·p.insert(make_pair(1,“china”))
2·p.insert(pair<,>(5,“japan”))
3·p.insert(map<,>::value_type(3,“U.S.A”))
输出:
for(it=p.begin();it!=p.end();it++)
cout<first<<" "<second<<endl;
(2)用下标【】:若关键字不存在,则添加;若存在则修改
1· p[1]=“china”
2·p[“china”]=1
【】中为关键字

重载

(1)struct node{
int x,y;
bool operator<(node const &a)const{//重载<运算符,const表示不允许修改值
return x<a.x;

}
(2)struct node{
double x,y;
node(int _x=0,int _y=0):x(_x),y(_y){}//相当于x=_x,y=_y
bool operator<(node const &a){//重载<运算符,const表示不允许修改值
If(x==a.x)return y<a.y ;
return x<a.x;

}

迭代器

容器<数据类型>::iterator it//定义一个可以访问X型的XX的迭代器,相当于指针
for(it=a.begin();it!=a.end();it++)cout<<*it;
//it!=a.end()为结束条件,迭代器一般不比较大小,关联容器的迭代器不能比较大小,只能判断是否相等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熙筠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值