algorithm头文件常用函数

max() min() abs()

max(x, y):返回x和y中的最大值
min(x, y):返回x和y中的最小值
参数必须是两个,可以是浮点数
返回三个数:max(x, max(y, z))
abs(x):返回x的绝对值

#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
    int x = 1, y = -2;
    printf("%d %d\n", max(x, y), min(x, y));
    printf("%d %d\n", abs(x), abs(y));
    return 0;
}
1 -2
1 2

swap()

swap(x, y)用来交换x和y的值

#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
    int x = 1, y = -2;
    swap(x, y);
    printf("%d %d\n", x, y);
    return 0;
}
-2 1

reverse()

reverse(it, it2)将数组指针在[it, it2)之间的元素或容器的迭代器在[it, it2)范围内的元素进行反转

#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
    int a[10] = {10, 11, 12, 13, 14, 15};
    reverse(a, a + 4); // 将a[0]~a[3]反转
    for(int i = 0; i < 6; i++)
    {
        printf("%d", a[i]);
    }
    return 0;
}
13 12 11 10 14 15

如果对容器中的元素(string) 进行反转,结果也是一样

#include <stdio.h>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
    string str = "abcdefghi";
    reverse(str.begin() + 2, str.begin() + 6);  // 对str[2]~str[5]反转
    for(int i = 0; i < str.length(); i++)
    {
        printf("%c", str[i]);
    }
    return 0;
}
13 12 11 10 14 15

next_permutation()

next_permutation()给出一个序列在全排列中的下一个序列

#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
    int a[10] = {1, 2, 3};
    //a[0]~a[2]之间的序列需要求解next_permutation
    do{
        printf("%d%d%d\n", a[0], a[1], a[2]);
    }while (next_permutation(a, a + 3));
    
    return 0;
}
123
132
213
231
312
321

fill()

fill()可以把数组或容器的某一段区间赋为某个相同的值,

#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
    int a[5] = {1, 2, 3, 4, 5};
    fill(a, a + 5, 233);
    for(int i = 0; i < 5; i++)
    {
        printf("%d", a[i]);
    }
    return 0;
}
233 233 233 233 233

lower_bound() upper_bound()

lower_bound(first, last, val):用来寻找在数组或容器的[first, last)范围内第一个值大于等于val的元素的位置
upper_bound(first, last, val):用来寻找在数组或容器的[first, last)范围内第一个值大于val的元素的位置

#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\n", lowerPos - a, upperPos - a);
    //寻找1
    lowerPos = lower_bound(a, a + 10, 1);
    upperPos = lower_bound(a, a + 10, 1);
    printf("%d, %d\n", lowerPos - a, upperPos -a);
    //寻找3
    lowerPos = lower_bound(a, a + 10, 3);
    upperPos = upper_bound(a, a + 10, 3);
    printf("%d, %d\n", lowerPos - a, upperPos - a);
    //寻找4
    lowerPos = lower_bound(a, a + 10, 4);
    upperPos = upper_bound(a, a + 10, 4);
    printf("%d, %d\n", lowerPos - a, upperPos - a);
    //寻找6
    lowerPos = lower_bound(a, a + 10, 6);
    upperPos = upper_bound(a, a + 10, 6);
    printf("%d, %d\n", lowerPos - a, upperPos - a);    
    return 0;
}
0, 0
0, 0
3, 6
6, 6
10, 10

如果只想获得欲查元素的下标,就可以不使用临时指针,而直接令返回值减去数组首地址即可

#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
    int a[10] = {1, 2, 2, 3, 3, 3, 5, 5, 5, 5}; //注意数组下标从0开始
    //寻找3
    printf("%d, %d\n", lower_bound(a, a + 10, 3) - a, upper_bound(a, a + 10, 3) - a);
    return 0;
3 6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光开朗男孩

你的鼓励是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值