STL及其他库函数

本文介绍了C++中实现全排列的next_permutation函数,结合排序和去重实现所有可能的排列组合。同时,讲解了二分查找的lower_bound函数用法,以及几个内置位运算函数的应用,包括判断二进制中1的个数、奇偶性和位置,以及末尾0的个数。这些技巧在算法和数据结构中非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全排列-next_permutation

sort(arr, arr + k);//排序
ll len = unique(arr, arr + k) - arr;//去重,与sort一起用
do
{
} while (next_permutation(arr, arr + len));//全排列

二分查找-lower_bound

stack<int> sta;
vector<int> v;
vector<int>::iterator it;
it = lower_bound(v.begin(), v.end(), sta.top()); //三个参数分别为数组头迭代器,尾迭代器
//要查找的参数值,返回数组中第一个大于或等于被查数的值的迭代器
ll val = lower_bound(v.begin(), v.end(), sta.top()) - v.begin();
//此时返回数组中第一个大于或等于被查数的值

该函数时判断n的二进制中有多少个1

int n = 15; //二进制为1111
cout<<__builtin_popcount(n)<<endl;//输出4

该函数是判断n的二进制中1的个数的奇偶性

int n = 15;//二进制为1111
int m = 7;//111
cout<<__builtin_parity(n)<<endl;//偶数个,输出0
cout<<__builtin_parity(m)<<endl;//奇数个,输出1

该函数判断n的二进制末尾最后一个1的位置,从一开始

int n = 1;//1
int m = 8;//1000
cout<<__builtin_ffs(n)<<endl;//输出1
cout<<__builtin_ffs(m)<<endl;//输出4

该函数判断n的二进制末尾后面0的个数,当n为0时,和n的类型有关

int n = 1;//1
int m = 8;//1000
cout<<__builtin_ctzll(n)<<endl;//输出0
cout<<__builtin_ctz(m)<<endl;//输出3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值