result.erase(unique(result.begin(),result.end()),result.end());
upper_bound
找到第一个大于 x 的位置,lower_bound
找到第一个大于等于 x 位置
加greater
就相反
注意数组一定要排好序
int pos1=lower_bound(num,num+6,7)-num;
int pos2=lower_bound(num,num+6,7,greater<int>())-num;
全排列函数
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__ctz(x)
返回括号中数字的二进制表示形式下末尾 0 的个数
两个函数分别针对 int
和 long long
__builtin_clz(x)
返回括号中数字的二进制表示形式下前导 0 的个数
int
32 位,long long
64 位
__builtin_popcount(x)
返回括号中数字的二进制表示形式下 1 的个数
__builtin_parity(x)
返回括号中数字的二进制表示形式下 1 个数的奇偶性,奇数返回1偶数返回0
__builtin_ffs(x)
返回括号中数字的二进制表示形式下最后一个 1 在第几位(从后往前看)
快速开平方,前一个是 4 位,后一个是 8 位