STL的一些东西

                 转自ZXY大佬。
**STL优先队列的基本操作**
priority_queue<int,vector<int>,greater<int> >q//定义一个小顶堆的优先队列
q.push(a);//把a放入队列
q.size();//返回当前队列的元素个数
q.empty();//如果队里为空返回true
q.top();//返回堆顶的元素
p.pop();//删去堆顶的元素
****************************************************
无论是访问vector还是其他最好都使用迭代器,不要直接当数组使用
**********************************************************
优先队列(堆):priority_queue<T,Sequence,Compare>
T:代表存放容器的数据类型如int,double,也可以是
结构体类型。
Sequence:实现优先队列的底层容器,也是顺序。
默认是:vector<T>
Compare:实现优先级的比较函数,
默认是:less<T>即大顶堆,也可以为greater<T>则为小顶堆
*****STL队列的基本操作*****
push(x) 将x压入队列的末端
pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值
front() 返回第一个元素(队顶元素)
back() 返回最后被压入的元素(队尾元素)
empty() 当队列为空时,返回true
size() 返回队列的长度
*****STL堆栈的基本操作*****
s.top();//返回栈顶元素
s.pop();//删除栈顶元素
s.empty();//若栈元素为空返回1
s.size();//返回栈的元素个数
*****STL之multiset的基本操作****
muliset<T,less<T> >s;//less代表默认从小到大排序,greater默认从大到小排序,如果不写,默认是less
muliset<int>::iterator i;//set类型的迭代器指针,可以理解为指针。
s.begin();//代表第一个位置
s.end();代表最后一个位置的后一个位置,即为空时。
s.insert(a);//向序列中插入a
s.find(a);//查找a这个元素,如果找到会返回这个值的迭代器,找不到会返回s.end()
find()的规则是查找的这个数既不可以排在这个数的前面,有不可以排在这个数的后面,即视为找到。
比较函数的重载定义符
struct Rule{
    bool operator() (const Student &s1,const Student &s2) {
    if(s1.score != s2.score) return s1.score < s2.score;
    else return (strcmp(s1.name,s2.name) < 0);
    }
};
s.erase(i);//代表删除i这个位置的迭代器.
i = s.lower_bound(a);//代表查找在a前面一个的位置即使得[s.begin(),i);都是小于a的
i = s.upper_bound(a);;//代表查找在a后面一个的位置即使得[i,s.end());都是大于a的
*****STL之set的基本操作*****
set是一个不重复的有序列,即如果这个元素在序列中已经存在,那么会插入失败
基本操作参考multiset的操作
set<T> st;
pair<set<T>::iterator,bool> result = st.insert(a);
这里insert有了返回值,而且是pair类型的,但multiset里面没有返回值。
***STL二分查找*****
头文件<algorithm>
函数lower_bound(begin,over,x) - begin;
begin是数组起始地址,over是结束地址,x是要寻找的数。
该函数的返回值是地址,故再减去起始地址。
该函数是返回大于或等于x的下标,如果没有就返回刚好比x大的那个元素下标,如果没有
比他大的就返回最后一个元素的下标。
*****STL之multimap的用法*****
map头文件
multimap<T,T> mp;//变量的生命,T可以是结构体类型的
multimap<T,T>::iterator p = mp.find(x);//p是迭代器,返回这个指针
mp.lower_bound(a);
mp.lower_bound(a);//参考set
*****STL之map的用法***********
map<T,T> mp//
可以用[]这种重载的运算符,用first来查找返回的是second.
mp.find()//查询first,返回是迭代器,如果这迭代器只想mp.end(),那么就是没有查找到.
mp.erase(it);//可以直接删除it这个迭代器
***STL去重函数unique()***
头文件<iostream>
函数int m = unique(begin,over) - begin;
返回去重后的元素个数(该函数并不是把重复元素删除,而是把重复元素
放在后面)这里m就是去重后元素的个数。

***STL之vector用法***
声明:vector<T>s;
vector是在堆上进行内存增加就像全局变量。
/*基本操作和用法*/
T可以是各种数据类型如int double 也可以是结构体
在用结构体时,直把结构体当成一个变量即可,不用多写;
如struct edge{int a,int b,int c};
vector<edge>G;
edge e;
G.push_back(e);//不需要其他的东西
*****************************************
s.push_back(); //向尾部添加元素
s.size();      //读取他的大小,即元素个数。
s[i];          //通过下标来访问这个元素。
s.begin()和s.end();//分别代表其实和结束元素。//用cout无法输出。。
s.front()和s.back();分别代表第一个和最后一个元素
s.insert(s.begin()+i,a);//在第i+1前面以为插入元素a
s.erase(s.begin()+i);//删除第i+1个元素。
s.clear();    //清空所有元素
s.empty();     //测试是否为空,如果为空返回true
**各个函数对与vector的使用**
reverse(s.begin(),s.end());//翻转vector数组
sort(s.begin(),s.end());//排序
lower_bound(s.begin(),s.end(),x) - s.begin(); //二分查找
unique(s.begin(),s.end()) - s.begin(); // 去重
自定义比较函数
bool cmp(int &a,int &b)
{
 if(a>b)
  return 1;
 return 0;
}
***STL之string的使用***
头文件<string> //没有.h,前面也没有c
声明的几种方式
string s; //一个s的空串
string str(s); //将str初始化为s的一个副本,二者所存放字符串相同。
string s("hello"); // 将s初始化为一个字符串.
string s(x,‘a’); //将s初始化为x个a的字符串副本
getline(cin,s);//读取一行字符,遇到\n停止,会读入空格。
getline(cin,s,‘a');//读入字符串,遇到a才停止,也会读入\n.
***string的各种基本操作***
s.empty() //判断字符串是否为空,为空返回true
s.size()或s.length()//返回字符串字符的个数
s[i]      //第i个位置存放的字符

string可以进行字符串相加
string s;
cin >> s;
s += "hello" + "yet";//可以加多个字符串,自动放在尾部。

string s2 = s + "world"; //这样也可以
string s3 = "hello" + "yet"; //这样就是错误的
s == s2 //如果两个字符串相等就返回true否则返回false

***3:string对象中字符的处理(头文件cctype)***
    isalnum(c)  如果c是字母或数字,返回 true
    isalpha(c)  如果c是字母,返回true
    iscntrl(c)  c是控制符,返回true
    isdigit(c)  如果c是数组,返回true
    isgraph(c)  如果c不是空格,则可打印,,则为true
    islower(c)  如果c是小写字母,则为true
    isupper(c)  如果c是大写字符,则为true
    isprint(c)  如果c是可打印的字符,则为true
    ispunct(c)  如果c是标点符号,则为true
    isspace(c) 如果c是空白字符,则为true
    isxdigit(c) 如果c是十六进制数,则为true
    tolower(c) 如果c是大写字符,则返回其小写字母,否则直接返回c
    toupper(c)  跟tolower相反

*****STL的一些函数*************
 *max_element(a,a+len);//返回该区间内元素的最大值
 *min_element(a,a+len);//返回该区间内元素的最小值




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值