记录一些经常用到但不记得语法的函数
unique + erase 去除重复值
result.erase(unique(result.begin(),result.end()),result.end()); |
upper_bound 和 lower_bound
upper_bound
找到第一个大于 x 的位置,lower_bound
找到第一个大于等于 x 位置
加greater<int>()
就相反
注意数组一定要排好序int pos1=lower_bound(num,num+6,7)-num;
int pos2=lower_bound(num,num+6,7,greater<int>())-num;
next_permutation 和 prev_permutation
全排列函数next_permutation
从前往后排列prev_permutation
从后往前排列
(这里的从前往后和从后往前指的是字典序,在后面有举例)int num[3] = {1, 2, 3};
do
{
cout << num[0] << " " << num[1] << " " << num[2] << endl;
} while (prev_permutation(num, num + 3));
从前往后排列返回1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
从后往前排列返回1 2 3
__builtin 系列函数
builtin_ctz 和 buitlin_ctzll
__builtin__ctz(x)
返回括号中数字的二进制表示形式下末尾 0 的个数
两个函数分别针对 int
和 long long
builtin_clz 和 buitlin_clzll
__builtin_clz(x)
返回括号中数字的二进制表示形式下前导 0 的个数int
32 位,long long
64 位
__builtin_popcount
__builtin_popcount(x)
返回括号中数字的二进制表示形式下 1 的个数
__builtin_parity
__builtin_parity(x)
返回括号中数字的二进制表示形式下 1 个数的奇偶性,奇数返回1偶数返回0
__builtin_ffs
__builtin_ffs(x)
返回括号中数字的二进制表示形式下最后一个 1 在第几位(从后往前看)
builtin_sqrt 和 builtin_sqrtf
快速开平方,前一个是 4 位,后一个是 8 位