Loading... ### 1.最大值 最小值 绝对值 max(x,y)和min(x,y)分别返回x和y中的最大值和最小值,且参数必须是两个。 abs(x) 返回x的绝对值。x必须为整数,浮点型的绝对值要用math头文件下的fabs #### 代码实例: ```cpp hljs vditor-linenumber #include<cstdio> #include<algorithm> using namespace std; int main() { int a = -5, b = 10; printf("%d %d\n", max(a, b), min(a, b)); printf("%d", abs(a)); return 0; } ``` ### 2.交换两值 swap() swap(x,y)用来交换x和y的值 #### 代码实例: ```cpp hljs vditor-linenumber #include<cstdio> #include<algorithm> using namespace std; int main() { int a = 5, b = 10; swap(a, b); printf("%d %d", a, b); return 0; } ``` ### 3.反转容器 reverse() reverse(it,it2) 可以将数组指针在[it,it2)之间的元素或容器的迭代器在[it,it2)范围内的元素进行反转。 #### 代码实例: ```cpp #include<cstdio> #include<algorithm> using namespace std; int main() { int a[10]={10,11,12,13,14,15}; reverse(a,a+6); for(int i=0;i<6;i++){ printf("%d ",a[i]); } return 0; } ``` ### 4.全排列 next_permutation() next_permutation() 给出一个序列在全排列中的下一个序列 #### 代码实例: ```cpp #include<cstdio> #include<string> #include<algorithm> using namespace std; int main() { int a[10]={1,2,3}; do{ printf("%d %d %d\n",a[0],a[1],a[2]); }while(next_permutation(a,a+3)); return 0; } ``` ### 5.区间赋值 fill() fill() 可以把数组或容器中的某一段区间赋为某个相同的值。和memset不同,这里的赋值可以使数组类型对应范围中的任意值。 #### 代码实例: ```cpp #include<cstdio> #include<string> #include<algorithm> using namespace std; int main() { int a[10]={1,2,3,4,5}; fill(a,a+5,233); for(int i=0;i<5;i++){ printf("%d ",a[i]); } return 0; } ``` ### 6.查找 1、`upper_bound()`:查找第一个大于x的值的位置 2、`lower_bound()`:查找第一个大于等于x的值的位置 **同样是返回地址,用法和`find()`函数一毛一样,限制条件也一毛一样,照着扒就行了。** #### 查找某值出现的次数:count() 1、在数组中查找x 在某区间出现的次数: #### 代码: ```cpp #include<iostream> #include<algorithm> using namespace std; int main() { int a[5] = {11,22,33,44,44}; cout << count(a, a+5, 44); return 0; } ``` 输出:2 **2、在容器中查找同理,只是需要用`iterator`迭代器或`begin()`、`end()`函数。** ##### 注意: 和前几个函数一样,如果需要指定区间查询,**注意是半开半闭区间(左开右闭区间)** 。 ### 7.求最大公因数 __gcd() 震惊把!在我最开始知道竟然有这个函数时,我也是震惊的! 另外,用二者乘积除以最大公因数即可得到最小公倍数。 因此没有求最小公倍数的函数。 #### 代码: ```cpp #include<iostream> #include<algorithm> using namespace std; int main() { int a = 12, b = 4; int Gcd = __gcd(a,b); cout << Gcd; return 0; } ``` ##### 注意: `__gcd()` 需要写两个下划线! <div class="tip inlineBlock share"> 最小公倍数等于两数之积除以最大公因数。 </div> ```cpp #include <bits/stdc++.h> using namespace std; int __lcm (int a, int b) { return a * b / __gcd(a, b); } int main() { int a = 4, b = 12; int c = __lcm(a,b); cout << c; return 0; } ``` ### 8.求交集、并集、差集 <div class="tip inlineBlock success"> 交集:`set_intersection()` 并集:`set_union()` 差集:`set_difference()` </div> - 1、求交集: (1):将两个数组的交集赋给一个容器(**为什么不能赋给数组呢?因为数组不能动态开辟,且inserter()函数中的参数必须是指向容器的迭代器。** ): **代码:** ```cpp #include<algorithm> #include<iostream> #include<vector> using namespace std; int main() { int a[5] = {1,2,3,4,5}, b[5] = {1,2,33,44,55}; vector<int>::iterator it; vector<int> v4; set_intersection(a, a+5, b, b+5, inserter(v4,v4.begin())); for(int i = 0; i < v4.size(); i++) { cout << v4[i] << ' '; } } ``` 输出:1 2 (2):将两个容器的交集赋给另一个容器: **代码:** ```cpp #include<algorithm> #include<iostream> #include<vector> using namespace std; int main() { vector<int> v1, v2, v3; for(int i = 0; i < 5; i++) v1.push_back(i); for(int i = 3; i < 8; i++) v2.push_back(i); set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3,v3.begin())); for(int i = 0; i < v3.size(); i++) { cout << v3[i] << ' '; } return 0; } ``` 输出:3 4 - 2、求并集: (1):将两个数组的并集赋给一个容器(**为什么不能赋给数组呢?因为数组不能动态开辟,且inserter()函数中的参数必须是指向容器的迭代器。** ): **代码:** ```cpp #include<algorithm> #include<iostream> #include<vector> using namespace std; int main() { int a[5] = {1,2,3,4,5}, b[5] = {1,2,33,44,55}; vector<int>::iterator it; vector<int>v4; set_union(a, a+5, b, b+5, inserter(v4,v4.begin())); for(int i = 0; i < v4.size(); i++) { cout << v4[i] << ' '; } } ``` 输出:1 2 3 4 5 33 44 55 (2):将两个容器的并集赋给另一个容器: **代码:** ```cpp #include<algorithm> #include<iostream> #include<vector> using namespace std; int main() { vector<int> v1, v2, v3; for(int i = 0; i < 5; i++) v1.push_back(i); for(int i = 3; i < 8; i++) v2.push_back(i); set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3,v3.begin())); for(int i = 0; i < v3.size(); i++) { cout << v3[i] << ' '; } return 0; } ``` 输出:0 1 2 3 4 5 6 7 - 3、差集完全同理。 #### 注意: **inserter(c,c.begin())为插入迭代器 此函数接受第二个参数,这个参数必须是一个指向给定容器的迭代器。元素将被插入到给定迭代器所表示的元素之前。** 最后修改:2021 年 12 月 30 日 © 来自互联网 打赏 赞赏作者 支付宝微信 赞 2 如果觉得我的文章对你有用,请随意赞赏