转自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就是去重后元素的个数。
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个位置存放的字符
声明: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
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相反
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);//返回该区间内元素的最小值
*max_element(a,a+len);//返回该区间内元素的最大值
*min_element(a,a+len);//返回该区间内元素的最小值