首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >STL中algorithm头文件下的常用函数

STL中algorithm头文件下的常用函数

作者头像
可定
发布2020-04-20 15:08:27
8930
发布2020-04-20 15:08:27
举报
文章被收录于专栏:细嗅蔷薇细嗅蔷薇

使用algorithm需要在头文件下加using namespace std;才能使用

max()、min()和abs()

max(x,y)与min(x,y):返回x和y的最大值和最小值(必须两个参数,可以是浮点数)。

如果要返回三个数的最大值,则可以使用max(x,max(y,z))的写法

*abs(x)返回x的返回值

x必须是整数int。 浮点数请使用math头文件下的fabs。

swap()

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

示例:

......
int main(){
    int x = 1, y = 2;
    swap(x,y);
    printf("%d %d"\n, x, y);//输出2  1
    ......
}

reverse()

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()

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()

fill():把数组或容器中的某一段区间赋成相同的值。和memset不同,这里的赋值可以时数组类型对应范围中的任意值。

sort()

请详见这篇文章。

lower_bound()和upper_bound()

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

本文标题:《STL中algorithm头文件下的常用函数》

本文链接:https://cloud.tencent.com/developer/article/1616920

特别声明:除特别标注,本站文章均为原创,本站文章原则上禁止转载,如确实要转载,请电联:wangyeuuu@qq.com,尊重他人劳动成果,谢过~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • max()、min()和abs()
  • swap()
  • reverse()
  • next_permutation()
  • fill()
  • sort()
  • lower_bound()和upper_bound()
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档