万能头
#include<bits/stdc++.h>
STL标准库
standard template library
C++自带的函数库,包含一些可以直接使用的类或者函数,如:sort,string,vector,list,map,set,queue,priority_queue,stack,pair等
template自适应类型
template<class T>
void swap(T &a,T&b)
{
T=a;
a=b;
b=c;
}
sort
void sort(RandomIt first,RandomIt last,Compare comp);
默认从小到大排列
int a[]={1,2,3};
sort(a,a+3);
bool cmp(int a,int b)
{
return a>b;
}
sort(a,a+3,cmp);
string
//读入一个字符串,以空格为间隔符
cin>>str;
//读入一行
getline(cin,str);
vector
变长数组,存储多个相同类型元素的容器。
//存储int类型变量的vector,默认size为0
vector<int> vec;
//size为n
vector<int> vec(n);
//迭代器声明
vector<int>::iterator i=vec.begin()
//begin返回的是第一个元素的迭代器,而end返回的是最后一个元素的下一个
//将a推入vec的末尾
vec.push_back(a);
//删除最后一个元素
v.pop_back()
//获取元素个数
v.size()
//修改容量
v.resize(int n)
//判断是否为空
v.empty()
//清空
v.clear()
//插入
v.insert(iter,a)
//删除
v.erase(iter)
//返回第一个元素的引用
v.front()
//返回最后元素的引用
v.back()
[关于引用](https://blog.csdn.net/sinat_42483341/article/details/87465982)
//输出
for(int i=0;i<vec.size();i++)
{
cout<<vec[i];
}
for(auto beg=vec.begin(),end=vec.end();beg!=end;beg++)
{
cout<<(*it);
}
//c++11用法
for(auto it:vec)
{
cout<<it;
}
list
双向链表
vector和list
list<int>lis;
//前端,中间,后端插入
lis.push_front(item);
lis.push_back(item);
auto it=find(lis.begin(),lis.end(),val);
if(it!=lis.end())
lis.insert(it,item)
for(auto it=lis.begin();it!=lis.end();it++)
cout<<*it;
for(auto it:list)
cout<<it;
//stl中的find函数,只有string的find方法是返回的下标,因为string是顺序索引,set,map,multiset,multimap都不是顺序索引的数据结构,所以返回的是迭代器
map
key-value形式
map<int,string>mp;
map[0]=a;
for(auto it:mp)
cout<<it.fist<<it.second;
//返回map中最小key的迭代器
mp.begin()
map中迭代器无法直接和数加减,只能使用–、++
pair
pair<int,int> p;
pari=make_pair(1,1);
cout<<p.first;
cout<<p.second;
set
集合,所有元素唯一,并且按照值自动排序
set<int> s;
s.insert(item);
//最小元素的迭代器
s.begin();
队列
先进先出
queue<int> q;
q.push(item);
q.pop();
q.front();
优先级队列
优先级队列按照元素的优先级顺序,从高到低弹出,默认是最大
priority_queue<int> pq;
/*priority_queue<Type, Container, Functional>
若直接用priority_queue<int>,他就用通过缺省值使用默认的方法和容器(vector),
即自顶之下,从大到小。若你需要比较其它的值,好比要比较一个pair<int, string>
然后自顶至下是string字典序从小到大,你就需要
priority_queue<pair<int,string>,vector<pair<int, string>>, cmp>,
cmp是一个结构体,在这个结构体中重载运算符()即可。*/
struct cmp{
bool operator()(const pair<int,string> p1, const pair<int,string> p2) {
return p1.second > p2.second;//因为priority_queue的top相当于vector的back
}
*/
};
栈
先进后出
stack<int> s;
s.top()
函数
swap(a,b)//交换两个元素的值
reverse(str.begin(),str.end());//把一个容器逆序
参考手册
https://zh.cppreference.com