日积月累 集腋成裘

11.8

基本位运算:

一、求n的二进制位第k位数 n>>k&1

二、返回n的二进制中最后一位1以及后面的0 lobit(n)

int lobit(int x){
    return x&-x;
}

11.10 

pair 的用法:

定义:pair是将两个数据组合成一组数据,pair的实现其实是一个结构体,既然是将两个数据组合成一个数据,那么里面自然就有两个数据了,我们将其称之为成员变量,分别为first和second。

一:用pair定义一个变量

pair<int,int> name;//两个int的结构类型可以变换

二:用pair定义一种结构体

typedef pair<int,int> PII;//定义一个结构类型为pair的结构体 PII

PII a,b;//表示a和b都是pair类型的 

动态数组vector的基本用法:

https://blog.youkuaiyun.com/zq9955/article/details/112597324

基本概况:定义vector对象的时候先不用指定数组的大小,有数据的化就往数组里面插入就可以了。vector内部自己管理存储空间。

定义:

#include<vector>
using namespace std;
vector<int> a;//int类型可以改变

基本操作:

vector<int>arr_int;
①arr_int[idx] 或 arr_int.at(idx)  //返回动态数组中下标为idx的arr_int[idx]元素的值
②arr_int.size() ;   //返回arr_int数组元素的总个数
③arr_int.front();  //返回arr_int 数组的第一个元素的值
④arr_int.back();  //返回arr_int数组的最后一个元素的值
⑤arr_int.clear();  //清空arr_int数组
⑥arr_int.begin();  //返回arr_int数组的第一个下标
⑦arr_int.end();   //返回arr_int数组最后一个数的下标
⑧arr_int.empty();  //判断arr_int数组是否为空,如果为空返回true,非空返回false
⑨arr_int.swap(v1);   //v1是另一个动态数组,将arr_int和v1两个动态数组的元素互换
⑩swap(arr_int,v1);  //同⑨

11.13

动态数组的去重操作:

	sort(h.begin(),h.end());
	h.erase(unique(h.begin(),h.end()),h.end());

步骤一:

先对动态数组h进行排序(sort)

步骤二:

运用库函数unique对其初步去重(unique(h.begin(),h.end())表示将数组h从头到尾里重复的元素放在数组的尾端,其返回值为h数组去重后有序序列的末值下标加一),然后通过

h.erase()来删除h数组末端重复的值。

11.14

栈的基本操作:

s.push(x);		//插入元素,x表示要插入的值,什么都行(但是类型必须和定义的相同)
s.pop();		//将栈顶弹出,无返回值
s.empty();		//判断是否是空栈
s.size();		//返回栈中有多少个元素
s.top();		//返回栈顶
s.swap(s2);		//交换s和s2里面的值(s2需要和s是一个类型)

单调栈基本思路:

维护栈内元素单调递增或递减

队列的基本操作:

q.front();		//获取队首
q.back();		//获取队尾
q.push(x);		//插入元素,x表示要插入的值,什么都行(但是类型必须和定义的相同)
q.pop();		//将队头弹出,无返回值
q.size();		//返回队列里有多少个元素
q.empty();		//如果队列为空,返回true,否则返回false( 等同于q.size()==0 )
q.swap(q2);		//交换q和q2里面的值(q2需要和q是一个类型)

双向队列:

双向队列不仅可以在队尾插入,在队头删除,还可以在队头插入,在队尾删除,还支持下标访问

#include<deque>
deque<typename> 双向队列名字;

基本操作 :

q.push_front(x);	//在队头插入元素,x表示要插入的值,什么都行(但是类型必须和定义的相同)
q.push_back(x);		//在队尾插入元素,x表示要插入的值,什么都行(但是类型必须和定义的相同)
q.pop_front();		//将队头弹出,无返回值
q.pop_back();		//将队尾弹出,无返回值
q.front();		//和queue的一样
q.back();		//和queue的一样
q.size();		//和queue的一样
q.empty();		//和queue的一样
q.swap(q2);		//和queue的一样
q[i]		//获取第i个元素(队头是第0个)
q.at(i);	//同上(不同的地方很少)
q.clear();		//清空双向队列
q.begin();		//获取首地址,返回迭代器 (待会说怎么用)
q.end();		//获取位地址+1 注意!还要加1
还有很多......

11.25

unsigned 类型

unsigned是指的有符号 即有负数 ,unsigned是无符号的 即没有负数

unsigned是默认的 显示指定unsigned 为了扩大类型范围

即int类型大小范围是-32768——32767

而unsigned int 是0 -  65535   32767+32768

unsigned long long 类型 

是一个64位的类型,溢出则代表对2的64次方取余。

​​​​​​​unsigned long long就是2^64范围,所以我们用其存储,可以起到同样的效果,溢出自动取模。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值