STL

常见

max(a,b)//返回a,b中的较大值,最好用同种数据类型的变量
min(a,b)//同上
swap(a,b)//交换a,b的值
unique(a+1,a+1+n)-a//去重,返回迭代器

对组

头文件: 有using namespace std;就好

使用有些繁琐,可以宏定义一下

重载了<运算符,按first元素升序排列

二分

头文件:<algorithm>

用法:int tmp=lower_bound(a+1,a+1+n,x)-a;//第一个大于等于x的值的迭代器,失败会返回last的位置(n+1),upper_bound返回最后一个

全排列

头文件:<algorithm>

用法:for(int i=1;i<=n;i++) a[i]=i;
do
{
    //do_sth
}
while(next_permutation(a+1,a+1+n));//prev_permutation生成上一个排列

sort(解放双手)

头文件:algorithm

可以给定义了“<”运算符的数据类型排序,例如string

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct cow{
    int a,b;
}e[1000];
bool cmp1(cow c,cow d){
    return c.a>d.a||(c.a==d.a&&c.b>d.b);//第一二优先关键字排序
}
bool cmp2(cow c,cow d){
    return c.a*c.b>d.a*d.b;//cmp里想怎么排就怎么排
}
int main()
{
    for(int i=1;i<=10;i++)
    e[i].a=i,e[i].b=10-i;
    sort(e+1,e+1+10,cmp1);
    for(int i=1;i<=10;i++)
    cout<<e[i].a<<endl;
    sort(e+1,e+1+10,cmp2);
    for(int i=1;i<=10;i++)
    cout<<e[i].a<<endl;
}

stack,queue,priority_queue
同上……

stack
头文件:<stack>
stack <int> q;
q.top(),q.empty(),q.pop(),q.size(),q.push();

queue
头文件:<queue>
queue <int> q;
q.front(),q.empty(),q.pop(),q.size(),q.push();

priority_queue
头文件:<queue>
priority_queue<int, vector<int>, greater<int> > q;//大根堆可以省略int后的参数,如需加入未重载"<"的数据类型,需要重载运算符

q.top(),q.empty(),q.pop(),q.size(),q.push();

string

头文件:<string>
定义:
string s;//开二维的话直接用char吧……
s="9999";
输入:
cin>>s;//空格终止
getline(cin,a);//读入1行
不要用scanf……
运算符:
string重载了许多运算符,如:
+,+=  //a+=b会把b拼接在a后面
==  //判断相等
<   //判断字典序
函数:
s.find(str)//在s中寻找str,成功返回位置(int),失败返回-1
swap(a,b)//交换
s.push_back('w');//类似vector的方式往最后面插入
s1=s.substr(0.i);//分离
s2=s.substr(i,s.size());
reverse(s.begin(),s.end());
reverse(0,s.size());//倒置

set//multiset
红黑树实现

头文件:<set>

定义:
set<int> s;
set<int>::iterator iter;
iter=s.begin();

遍历:
使用迭代器 
for(;iter!=s.end();iter++) 
    cout<<*iter<<" ";

函数:
s.insert(x);//插入x
s.clear();//清空set
s.erase(x);//删除值为x的元素(或x为迭代器)
s.size();
s.empty();
s.lower_bound(x);//二分,返回第一个大于等于x的迭代器
s.find(x);//返回迭代器,失败则返回s.end(),需要用if判一下

map

头文件:<map>

定义:
map <int,int> mp;
map<int,int>::iterator iter;

可以用下标插入

函数:
mp.clear();
mp.size();
mp.begin();
mp.end();//同set中函数用法
mp.find(x);
mp.erase(x);//删除值为x的元素

bitset

头文件:<bitset>

定义:bitset<32> bs;//bitset类型对象的区别仅在其长度而不在其类型。在定义bitset时,要明确bitset含有多少位,须在尖括号内给出它的长度值

s[pos]直接访问s的pos位

函数:
s.any();//有1个1则返回1,全0返回0
s.none();//跟上面的相反……
s.size();//大小(也就是定义的那个值)
s.set();//全部置为1
s.count();//返回1的个数
s.reset();//清零
s.flip();//全部取反
s.flip(pos)//pos位取反
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值