c++ STL容器、位运算与常用库函数

一.STL容器

1.vector

vector 是变长数组,用多少开辟多少。

在这里插入图片描述

vector中常用的函数:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

vector的迭代器:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

vector数组的三种遍历方式:
在这里插入图片描述

2.queue

队列的性质是先进先出
在这里插入图片描述

注意: priority_queue优先队列,就是堆,默认是大根堆。
大根堆每次弹出队列中的最大值,小根堆每次弹出队列中的最小值。

在定义大根堆结构体的时候,一定要在结构体内重载<小于号。
在这里插入图片描述
同理,定义小根堆的时候要重载大于号。

循环队列 queue
在这里插入图片描述

优先队列 priority_queue

在这里插入图片描述

注意:
只有 queue priority_queue stack 没有clear()函数,其他的都有。

//清空队列的方法:
queue<int> q;
q=queue<int>();    //重新进行初始化,就相当于进行清空操作了。
3.stack

栈是后进先出的。
在这里插入图片描述

stack<int> stk;
stk.top();    //返回栈顶元素
4.deque

双端队列,既可以在队头插入和删除,又可以在队尾插入和删除。
在这里插入图片描述

5.set

在这里插入图片描述

迭代器:

在这里插入图片描述
常用函数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.map

在这里插入图片描述
map的定义和写法:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

常用的函数:

在这里插入图片描述

7.其他

在这里插入图片描述
unordereed_map几乎和unordered_set几乎完全一样,就是unordered_map效率更高,使用的更高。

在这里插入图片描述
定义了一个长度为1000的0 、1串。
a.count(); 返回串中1的个数。

pair的常用:在这里插入图片描述
pair是支持比较运算的,> < == !=等等。
先比较第一个first,如果first相等再比较第二个second。

二.位运算

1.与、或、非、异或

运算规则:
在这里插入图片描述

整数进行运算要先转换为对应的二进制,再逐位进行运算,最后再转换为整数。
在这里插入图片描述
例如: 3^6 =5
在这里插入图片描述

2.左移、右移

左移:
每左移一位,就在末位补0.
a<<k相当于 a*2k.

右移:
先将数转换为二进制数,然后,每右移一位,相当于去掉一个末位
例如: a=10101010 右移一位就去掉末位的0,变为1010101;再右移一位,就去掉1,变成101010。
a>>k 相当于 a/2 k

常用的两个位运算的操作:
从第0位数开始。
在这里插入图片描述>-a~a+1是一样的。>在这里插入图片描述

三.常用库函数

以下所有的库函数都在
#include< algorithm >中

1.reverse 翻转

reverse既可以翻转数组,也可以翻转vector
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.unique 去重

应用的前提是:所有的重复元素都在一起,例如:1 1 2 3 3 3 4 ,
去重之后,就会变成 1 2 3 4

在这里插入图片描述
m为去重后的不同的元素的数量。
在这里插入图片描述

3.random_shuffle 随机打乱

在这里插入图片描述

在这里插入图片描述

4.sort 排序

在这里插入图片描述

从小到大排序
在这里插入图片描述
>从大到小排序在这里插入图片描述

//还可以自定义排序规则
bool cmp(int a,int b)   //a是否应该排在b的前面

	return a>b;   //按照从大到小进行排序
}
bool cmp(int a,int b)   //a是否应该排在b的前面

	return a<b;   //按照从小到大进行排序
}
vector<int> a({1,2,3,4});
sort(a.begin(),a.end(),cmp);

结构体也可以进行排序

struct Rec
{
		int x,y;
}a[5]; 

1.写一个排序函数
在这里插入图片描述

2.直接在结构体内部重载运算算符
在这里插入图片描述
这样,就根据重载的运算符的含义,进行排序了,上述为升序。

5.lower_bound/upper_bound 二分

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值