STL常用算法

张开发
2026/4/16 18:20:20 15 分钟阅读

分享文章

STL常用算法
#include iostream #include bits/stdc.h using namespace std; bool cmp(pairint, int a, pairint, int b){ // 第二位从小到大排序 if(a.second ! b.second) return a.second b.second; // 第二位相同时第一位从大到小排序 return a.first b.first; } // 最小公倍数蓝桥杯的编译器不支持了需要自己写 int lcm(int a, int b){ return a / __gcd(a, b) *b; } int main(){ // 1.swap 交换两个变量的值 int a 1, b 2; cout a b endl; swap(a, b); cout a b endl; cout ------------- endl; // 2.sort 给数组排序从小到大 vectorint arr{1, 3, 5, 1, 9, 5, 4}; // 起始位置结束位置后一个greatint传入第三位即从大到小排序 // 起始位置结束位置后一个greatint或者理解为传入的第三位为假则从小到大为真则从大到小 sort(arr.begin(), arr.end()); for (int i 0; i arr.size(); i){ cout arr[i] endl; } vectorpairint, int arr2{{1, 2}, {2, 4}, {3,4}, {0,9}}; sort(arr2.begin(), arr2.end(), cmp); for (auto ele : arr2){ cout ele.first ele.second endl; } cout ------------- endl; // 3.lower_bound / upper_bound 【升序排列】中二分查找某元素找不到返回尾迭代器 // lower_bound:查找大于等于x的第一个元素的位置 // upper_bound:查找大于x的第一个元素的位置 // 查找小于- lower_bound的前一个元素-1 // 返回的是迭代器如何转成下标索引呢减去头迭代器即可 vectorint arr3{0, 1, 5, 6, 8, 9}; int pos lower_bound(arr3.begin(), arr3.end(), 10) - arr3.begin(); cout pos endl; cout ------------- endl; // 4.reverse 反转一个可迭代对象的元素顺序 reverse(arr3.begin(), arr3.end()); // reverse(arr3.begin() 2, arr3.end() 6); 反转第2位到第6位 for (auto ele : arr3){ cout ele endl; } cout ------------- endl; // 5.max/min 最大值最小值 cout max(1,2) endl; cout min({1, 3, 6}) endl; // 大括号比较多个数 cout ------------- endl; // 6.uinque 消除数组的重复相邻元素数组长度不变但是有效数据缩短返回的是有效数据位置的结尾迭代器。 // 单独使用 unique 并不能达成去重效果因为它只消除相邻的重复元素。但是如果【序列有序】那么它就能去重了。 // 但是它去重后序列尾部会产生一些无效数据[1,1,2,4,4,4,5] - [1,2,4,5,?,?,?]为了删掉这些无效数据我们需要结合 erase. vectorint arr4{1, 2, 1, 4, 5, 4, 4}; sort(arr4.begin(), arr4.end()); arr4.erase(unique(arr4.begin(), arr4.end()), arr4.end()); for (auto ele : arr4){ cout ele endl; } cout ------------- endl; // 7.数学函数 均支持int,float,double,long long abs(-1); //绝对值 exp(2); //e的多少次方 log(3); //ln3 pow(2, 3); //2的3次方 pow(2, 1.0 / 3); //2的3分之一次方 sqrt(2); //根号2 ceil(2.1); //向上取整 floor(2.1); //向下取整 round(2.4); //四舍五入 // 8.__gcd() 返回最大公因数最小公倍数见开头函数 int x __gcd(8, 12); cout x endl; cout lcm(26, 8) endl; return 0; }视频网课bilibiliBV1L8411y7th视频网课

更多文章