STL和常用方法

容器

1.vector

#include<vector>
//变长数组

vector<int> a;
vector<int> b[233]; //二维数组
vector<int> a({1,2,3});
struct Rec
{
	int x,y; n  
};
vector<Rec> c;



//长度
a.size();

//判空,是空的话返回true
a.empty();

//当前数组清空
a.clear();
  


//迭代器,左闭右开
 vector<int>::iterator it=a.begin();
a.begin()//a的第一个元素地址    
*a.begin()//访问的是a[0]元素
it+2 //访问的是地址a[2];
it   //访问的是地址a[0];    
a.end//a的最后一个位置的下一个位置地址    
    
//遍历vector数组
    for(int i=0;i<a.size();i++)
    cout<<a[i]<<endl;
    for(vector<int>::iterator it=a.begin();it!=a.end();it++)
            cout<<*it<<endl;
    for(int x:a) cout<<x<<endl;


//查元素
a.front()等价于a[0]等价于*a.begin()
a.back()等价于a[a.size()-1]等价于*(a.end()-1)

//改元素
a.push_back(x);//往最后一个加元素
a.pop_back();//删除最后一个元素

2.queue

#include<queue>

queue<int> q;
queue<double> q;
priority_queue<int> q;//默认大根堆
priority_queue<int,vector<int>,greater<int>> b;//小根堆
priority_queue<pair<int,int>> q;
struct Rec
{
	int a,x,y;
}
queue<Rec> b;


q.push(1) //在队头插入一个元素
q.pop() //弹出队尾元素
q.front() //返回队头
q.back()  //返回队尾 

//清空队列
q=queue<int>();

3.stack

#include<stack>
stack<int> stk;
stk.push(1);
stk.top();//返回栈顶元素
stk.pop();//删除栈顶元素

4.deque

//双端队列
dequeue<int> q;
q.begin(),q.end();
q.front(),q.back();
q.push_back(1);//最后插入一个元素
q.push_front(2);//开头插入一个元素
q[0];//随机访问一个元素
q.pop_back(),q.pop_front()//弹出最后一个元素和弹出第一个元素
q.clear();//清空队列

5.set

#include<set>
//不支持随机访问
set<int> a;//不能包含重复元素
multiset<int> b;//元素可以重复
a.size();
a.empty();
a.clear();
a.insert(x);//插入x
a.find(x);//查找x\
if(a.find()==a.end())  //判断x在a中是否存在

函数

1.位运算

求x的第k位数字  x >> k & 1
lowbit(x) = x & -x,返回x的最后一位1

2.常用库函数

#include<algorithm>
1)reverse 翻转
    翻转一个vector
    reverse(a.begin(),a.end);
	翻转一个数组,元素存放在下标0~n-1
    reverse(a,a+n);
2)unique 去重
    把一个vector去重:
    int m = unique(a.begin(), a.end()) – a.begin();
    把一个数组去重,元素存放在下标1~n:
    int m = unique(a, a+n) – (a);
3)random_shuffle 随机打乱
    用法与reverse相同
4) sort
bool cmp(int a, int b) {return a > b; }
sort(a, a+n, cmp);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迟意..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值