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 的个数
两个函数分别针对 intlong 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 位