翻转
#include<algorithm>
reverse
vector<int>a({1,2,3,4});
reverse(a.begin(),a.end() );
int a[]={1,2,3,4,5,6};
reverse(a,a+n);翻转前n项
去重
unique
前提是要相同元素是挨在一起的
1 1 2 2 3 3 4 4这样才能用unique
注意unique去重复的时候
这种不行‘
1,1,2,3,4,2,2;
这种只能变成
1,2,3,4,2,2
int m = unique(a,a+n)-a;输出不同元素的数量
unique(a,a+n);//给前n项去重
vector<int>a({1,1,2,2,3,4,5});
unique(a.begin(),a.end())-a.begin();
a.erase(unique(a.begin(),a.end() ),a.end() );也是判断不同元素个数
random_shuffle
把数组打乱顺序
#include<ctime>
srand(time(0));//加入随机种子即可
random_shuffle(a.begin(),a.end() );
sort
排序
sort(a.begin(),a.end() );//默认从小到大
要从大到小
sort(a.begin(),a.end(),greather<int> );从大到小排序
sort(a.begin(),a.end(),cmp);//cmp是自己定义的函数,从而让这个排序按照我们规定的排
bool cmp(int a , int b)//a是否应该排在b的前面
{
return a<b;//如果a小于b那么a就排b前面
}
sort排结构体
struct Rec
{
int x,y;
}a[5];
bool cmp(Rec x , Rec y) | 或者可以重载小于号
{ | struct Rec
return Rec.x<Rex.y; | {
} | int x,y;
for(int i = 0 ; i < 5 ; i++) | bool operator< (const Rec&t)const
{ | {
a[i].x=-i; | return x<t.x;
a[i].y=i; | }
} | }a[5];
for(int i = 0 ; i <5;i++)
{
printf("(%d %d)",a[i].x,a[i].y);
}
sort(a,a+5,cmp);
二分
lower_bound/upper_bound
//可以二分vector和数组
//前提是已经要二分的部分已经排序好了’
//这个返回的是迭代器,在数组里面就是指针
int a[]={1,3,4,5,6};
int* p =lower_bound(a,a+5,3);//这个就是返回大于等于3的最小值
int* q =upper_bound(a,a+5,3);//返回大于3的最小值
int* q =upper_bound(a,a+5,3)-a;//这个返回的是第几位大于三
vector<int>a({1,2,3,4,5});
int p =lower_bound(a.begin(),a.end(),3)-a.begin();//这个表示返回的是第几位数大于三
int p =lower_bound(a.begin(),a.end(),3);//这个返回的是哪个数大于三
求出下一个排列组合
next_permutation();
求出上一个排列组合
prev_permutation
所谓“下一个”和“上一个”,例子:对序列 {a,b,c},每一个元素都比后面的小,按照字典序列,固定a之后,a比bc都小,c比b大,
它的下一个序列即为{a, c, b},
而{a, c, b}的上一个序列即为{a, b, c},
同理可以推出所有的六个序列为:
{a, b, c}、{a, c, b}、{b, a, c}、{b, c, a}、{c, a, b}、{c, b, a},其中{a, b, c}
没有上一个元素,{c, b, a}没有下一个元素。
函数名:min_element
函数原型:min_element(_ForwardIterator __first, _ForwardIterator __last)
函数作用:返回一个数组里的最小值的迭代器(因为是迭代器所以求值时要加上 *)
时间复杂度:O(n)O(n)
输入后输出 min_element(a,a+n) 即可
将字符类型转化为整数类型
包含在头文件#include<string>
1. stoi函数
作用:
将 n 进制的字符串转化为十进制
用法
stoi(字符串,起始位置,n进制(默认10进制)),将 n 进制的字符串转化为十进制
erase(first,last);删除从first到last之间的字符,(first和last都是迭代器)