STL常用

STL常用

一.vector

1. 应用
用于普通数组会超内存的情况
以邻接矩阵的方式存储图
2. 定义:typename可以是int,double,char,结构体
3. 元素访问
下标访问
迭代器访问:vector< typename >::iterator it;
4. 函数

#include<vector>
using namespace std;
vector<typename>name;//定义
vector<vector<int> >name;//如果typename也是一个vector,>>之间要有空格
vector<typename>name[maxn];//二维vector< typename >name[maxn],有一维长度固定为maxn,无法改变
int main()
{
    push_back();//vector后加一个元素
    pop_back();//删去vector的尾元素
    size();//获得vector中元素个数
    clear();//清空
    insert(it,x);//向vector任意迭代器it处插入一个元素x
    erase(it);//删去单个元素
    erase(first,last);//删去区间[first,last)内的所有元素
    return 0;
}

二.set

1. 应用:去重,自动排序
2. 定义:typename类型同vector;
3. 元素访问:只能用迭代器set< typename >::iterator it;
4. 函数:

#include<set>//头文件
using namespace std;
set<typename>name;//定义
int main()
{
	insert(x);//将x插入set容器中,并自动排序,去重
    find(value);//返回对应值为value的迭代器
    size();//获得vector中元素个数
    //删去单个元素
    name.erase(it);//
    name.erase(value);//
    name.erase(first,last);//删去区间[first,last)内的所有元素
    clear();//清空
    insert(it,x);//向vector任意迭代器it处插入一个元素x
    return 0;
}

三.string

1. 应用
代替一般字符数组char str[];
2. 访问:
通过下标访问
:如果要读入或者输出,只能用cin,cout
迭代器访问:string::iterator it;
string和vector一样,支持直接对迭代器进行加减某个数
如:str.begin()+3;
3. 函数:

#include<string>
using namespace std;
string str;
int main()
{
    str1+=str2;//直接将str1,str2连起来,拼到str1上
    str1==str2;//类似的操作还有:!=,<,<=,>,>=
    length(str);//=size(str);
    insert(pos,str);//在pos位置上插入str
    insert(it,it1,it2)//it为字符串要插入的位置,it1和it2分别是待插入字符串的首尾
    str.erase(it);
    str.erase(first,last);
    str.erase(pos,len);//pos是开始删除的位置,len是要删除的字符串的长度
    str.clear();
    substr(pos,len);//返回从pos开始,长度为len的字符串
    string::npos//一个常数,值为-1,实际也可做unsigned_int的最大值
    str.find(str2);//str2是str子串,返回子串第一次出现的位置,否则返回string::npos
    str.find(pos,str2);//从pos开始找str2,其他同上
    str.replace(pos,len,str2);//将从pos位置开始长为len的子串替换为str2
    return 0;
}

四.map

1.应用:可将任何基本类型映射到任何基本类型
2.访问:
通过下标访问:mp[‘c’]=a,注意引号
通过迭代器访问:map<typename1,typename2>::iterator it;
可用it->first访问键,it->second访问值
另外,map会以键的自大到小排序
3.函数

#include<map>
using namespace std;
map<typename1,typename2>mp;//name1是键的类型,name2是值的类型
int main()
{
	find(key);//返回key映射的迭代器
	mp.erase(it);//同上
    mp.erase(key);//key为要删除的映射的键
    mp.erase(first,last);//同上
    size();
    clear();
    return 0;
}

五.queue

1.思想:先进先出
2.访问:只能用front()访问队首,back()访问队尾
3.函数:

#include<queue>
using namespace std;
queue<typename>q;//name1是键的类型,name2是值的类型
int main()
{
	q.push();//入队
	q.front();//获取队首
	q.back();//获取队尾
	q.pop();//出队
	q.empty();//判断是否为空
	q.size();
    return 0;
}

六.priority_queue

1.访问:只能用top()访问队首元素
2.函数

#include<queue>
using namespace std;
priority_queue<typename>q;//name1是键的类型,name2是值的类型
int main()
{
	q.push();//入队
	q.top();//获取队首
	q.pop();//出队
	q.empty();//判断是否为空
	q.size();
    return 0;
}

3.优先级设置
(1)基本数据类型:

    priority_queue<int,vector<int>,less<int>> q;
    priority_queue<typename>q;//二者等价

less< int >表示数字越大优先级越大,great< int >刚好相反;
char行根据字典序来排序
(2)结构体:

struct node
{
	string a;
	int b;
	friend bool operator<(node x,node y)//重载小于号,即对小于符号重新定义
	{
		return x.b<y.b;
	}
};

:1.此函数与sort中cmp的效果刚好相反
2.若结构体内数据较为庞大,可使用引用来提高效率,即加上“const”“&”,如:

	friend bool operator<(const node &x,const node &y)
	{
		return x.b<y.b;
	}

七.unique

1.应用:去重
具体来说,unique可以“删除”相邻元素中的所有重复元素,让每个不同值的元素只留下一个,但是这里的删除也不是真的删除,只是将不相同的元素往前移,占领了之前相同元素的位置,而那些相同的元素则可怜巴巴的被挤到最后面去了。又由于它只能“删除”相邻元素中的所有重复元素,所以我们一般使用前会对数组先进行排序操作
2.使用方法:unique(数组名,数组名+数组长度)(区间左闭右开),和sort用法类似

int a[maxn],n;
unique(a,a+n)-(a+1);

返回的是去重后数组的长度
3.unique_copy:将去重后的数组储存到另一个数组中,并且没有保留重复的元素,重复元素所占位置全部变成了随机数

int a[maxn],c[maxn],n;
unique_copy(a,a+n,c);

将a中去重元素赋值到c中

当然,其实也可以直接用STL中的erase函数,直接将a数组中后面的重复的数去掉

    int newend,a[maxn];
    newend = unique(a,a+n); 
    a.erase(newend,a+n);
  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值