使用algorithm需要在头文件下加using namespace std;
才能使用
max(x,y)与min(x,y):返回x和y的最大值和最小值(必须两个参数,可以是浮点数)。
如果要返回三个数的最大值,则可以使用max(x,max(y,z))的写法
*abs(x)返回x的返回值
x必须是整数int。 浮点数请使用math头文件下的fabs。
swap(x,y)用来交换x和y的值
示例:
......
int main(){
int x = 1, y = 2;
swap(x,y);
printf("%d %d"\n, x, y);//输出2 1
......
}
reverse(it1,it2):将数组指针在[it1,it2)之间的元素或容器的迭代器在[it1,it2)范围内的元素进行反转。
如果是reverse(a,a+4),则是将a0~a3反转。
示例(反转数字):
......
int main(){
int a[10] = {10, 11,12, 13, 14, 15};
reverse(a, a + 4);
for(int i = 0; i < 6; i++){
printf("%d",a[i]);//输出 13 12 11 10 14 15
}
}
示例(反转字符串,即反转容器中的元素):
......
int main(){
string str = "abcdefghi";
reverse(str.begin() + 2, str.begin() + 6);//将str字符串中的2号位到5号位反转
for(int i = 0; i < str.length(); i++){
printf("%c",str[i]);//输出abfedcghi
}
}
next_permutation()给出一个序列在全排列的下一个序列。
什么是全排列?下面给出一张图,或许更好理解
举个栗子:
n = 3时的全排列:123、132、213、231、312、321。
这样231的下一个序列位312
示例:
......
//输出n=3的全排列
int main(){
int a[10] = {1, 2, 3};
do{
printf("%d%d%d",a[0], a[1], a[2]);
}while(next_premutation(a, a+3));
}
fill():把数组或容器中的某一段区间赋成相同的值。和memset不同,这里的赋值可以时数组类型对应范围中的任意值。
请详见这篇文章。
lower_bound():用来寻找在数组或容器中[first,last)范围内的第一个值大于等于val的元素的位置。
如果是数组,则返回该位置的指针。 如果是容器,则返回返回该位置的迭代器。
upper_bound:用来寻找在数组或容器中[first,last)范围内的第一个值大于val的元素的位置。
数组和容器如上面同样返回该位置的各自对应的东西。
lower_bound()和upper_bound()的实现详见这篇文章。
显然,如果数组或容器没有需要寻找的元素,则lower_bound()和upper_bound()均返回该元素的位置的指针或迭代器(即假设存在该元素时,该元素应当在的位置)。
lower_bound()和upper_bound()的复杂度均为O(log(last-first))。
示例:
#include<stdio.h>
#include<algorithm>
using namespace std;
int main(){
int a[10]={1, 2, 2, 3, 3, 3, 5, 5, 5, 5};
//寻找-1
int *lowerPos = lower_bound(a, a + 10, -1);
int *upperPos = upper_bound(a, a + 10, -1);
printf("%d, %d", lowerPos - a, upperPos - a);//输出 0 0
//寻找3
int *lowerPos = lower_bound(a, a + 10, 3);
int *upperPos = upper_bound(a, a + 10, 3);
printf("%d, %d\n", lowerPos - a, upperPos - a);// 输出 3 6
//可以想一下上面“lowerPos - a”中的a的用处时什么?
}
如果只是想获得想要查找元素的下标,直接令返回值减去数组首地址即可,可以不使用临时指针_lowerPod和_upperPod。
示例:
#include<stdio.h>
#include<algorithm>
using namespace std;
int main(){
int a[10] = {1, 2, 2, 3, 3, 5, 5, 5, 5};
printf("%d, %d\n", lower_bound(a, a + 10, 3) - a, upper_bound(a, a + 10, 3) - a);// 输出 3 6
return 0;
}
版权所有:可定博客 © WNAG.COM.CN
本文链接:https://cloud.tencent.com/developer/article/1616920
特别声明:除特别标注,本站文章均为原创,本站文章原则上禁止转载,如确实要转载,请电联:wangyeuuu@qq.com,尊重他人劳动成果,谢过~