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.直接在结构体内部重载运算算符
这样,就根据重载的运算符的含义,进行排序了,上述为升序。