转载注明出处csdn bestsort
函数统计
求gcd
__gcd(a,b)
.(两个下划线开头)
int a=34,b=4;
cout << __gcd(a,b)<<endl;
注:部分oj可能不支持调用__gcd
;
求全排列
- 求数组a的上一个排列
prev_permutation(a,a+a.size())
int a[] = {1,4,2,3};
prev_permutation(a,a+4);
for(int i=0;i<4;i++)
cout << a[i] << endl;
return 0;
- 求数组a的下一个排列
next_permutation(a,a+.size())
int a[] = {1,4,2,3};
next_permutation(a,a+4);
for(int i=0;i<4;i++)
cout << a[i] << endl;
return 0;
二分
此类目下两个函数都是返回的地址,所以要求下标则需要减去初始地址a
- 查找大于或等于x的第一个位置 lower_bound(a,a+a.size(),x)
int a[] = {1,3,5,7,9,11};
cout << a[lower_bound(a,a+6,7)-a] << endl;
-查找第一个大于x的数字的位置upper_bound(a,a+a.size(),x)
。用法同上
初始化
- 将a数组中前n项填充数字x:
fill(a,a+n,x)
cstring
中,将a数组前n个内容初始化为bmemset(a,b,n<<2)
,b只能0,-1,0x3f,初始化的结果分别为0,-1,0x3f3f3f3f(无穷大),用于做题时推荐写memset(a,b,(n+3)<<2)
防止出错
其他
- 翻转a[x]-a[y]之间的内容:
reverse(a+x,a+y)
翻转区间[x,y) - 交换a,b的值`swap(a,b)
- x转化为二进制中
1
的个数__builtin_popcount(x)