algorithm头文件下的常用函数

【头文件】algorithm

1、max(),min()与abs()

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

abs(x)x一定是整数

fabs(x)浮点数

2、swap()

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

3、reverse()

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

#include<utility>
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<map>
using namespace std;
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]);
   }
    return 0;
}

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

#include<utility>
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<map>
using namespace std;
int main()
{
   string str="abcdefghi";
   reverse(str.begin()+2,str.begin()+6);
   for(int i=0;i<str.length();i++)
   {
       printf("%c",str[i]);
   }
    return 0;
}

4、next_permutation()

扫描二维码关注公众号,回复: 2946592 查看本文章

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

#include<utility>
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<map>
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;
}

使用循环是因为next_permutation在已经到达全排列的最后一个时会返回false

这样会方便退出循环

而使用do……while不使用while是因为序列1 2 3本身也需要输出

如果使用while会直接跳到下一个序列再输出,结果就会少一个

5、fill()

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

与memset不同

这里的赋值可以是数组类型对应范围中的任意值

fill(a,a+5,333);

5、sort()

容器的排序

【注意】在STL容器中,只有vector、string、deque是可以使用sort的

这时因为像set、map这种容器是用红黑树实现的,元素本身有序,故不能使用sort

#include<utility>
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;
bool cmp(int a,int b)
{
    return a>b;
}
int main()
{
    vector<int> vi;
    vi.push_back(3);
    vi.push_back(1);
    vi.push_back(2);
    sort(vi.begin(),vi.end(),cmp);
    for(int i=0;i<3;i++)
    {
        printf("%d ",vi[i]);
    }
    return 0;
}

sort(str,str+3);

7、lower_bound()和upper_bound()(需要在一个有序数组或容器中)

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

如果是数组,则返回该位置的指针;

如果是容器,则返回该位置的迭代器

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

如果是数组,则返回该位置的指针;

如果是容器,则返回该位置的迭代器

显然,如果数组或容器中没有需要寻找的元素,则返回的均是

可以插入该元素的位置的指针或迭代器

(即假设存在该元素时,该元素应当在的位置)

【tips】

如果只是想获得欲查元素的下标,就可以不使用临时指针

而直接令返回值减去数组首地址即可

若数组是a

即lower_bound(a,a+10,3)-a;

知识点来自于《算法笔记》

猜你喜欢

转载自blog.csdn.net/qq_42232118/article/details/82080005