algorithm下的常用函数

algorithm下的常用函数

max(),min(),abs()

  • max(x,y)返回x和y中最小的数字
  • min(x,y)返回x和y中最大的数字
  • abs(x)返回x的绝对值,注意x应当是整数,如果是浮点数应当使用math头文件下的fabs函数

swap()

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

reverse()

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

# include <iostream>
# include <algorithm>
using namespace std;
int main(void)
{
    int a[5]={1,3,2,3,4};
    reverse(a,a+4);//将a[0]~a[3]逆转
    for(int i=0;i<5;i++)
    {
        cout<<*(a+i)<<endl;
    }
    return 0;
}

对于容器中元素

# include <iostream>
# include <algorithm>
using namespace std;
int main(void)
{
   string s="abcdefghig";
   reverse(s.begin(),s.end());
   cout<<s<<endl;
   return 0;
}

next_permutation()

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

# include <iostream>
# include <algorithm>
using namespace std;
int main(void)
{
   int a[10]={1,2,3};
   do
   {
       cout<<a[0]<<' '<<a[1]<<' '<<a[2]<<endl;
   }
   while(next_permutation(a,a+3));
   return 0;
   
}

fill()

可以将数组或者容器中某个区间赋值为某个相同的值,和memset不同的是,这里的赋值可以是数组类型范围内任意的值

int a[5]={1,2,3,4,5};
fill(a,a+5,233);//将a[0]~a[4]全部赋值为233

sort()

sort的基本使用

sort(首地址(必填),尾地址的后一个地址(必填),比较函数(非必填))

int a[6]={1,2,3,4,5,6};
sort(a,a+4);//对a[0]~a[3]进行排序

实现比较函数

基本排序

如果不填比较函数,会自动从小到大进行排序

规定比较函数排序

bool cmp(int a,int b)
{
    return a>b;//可以理解为a>b的时候a放在b的前面
}
int a[6]={1,2,3,4,5,6};
sort(a,a+4,cmp);

结构体排序

struct node{
    int x,y;
}ssd[10];


bool cmp1(node a,node b){
     return a.x>b.x;
}

bool cmp2(node a,node b){
    if(a.x!=b.x)
    return a.x>b.y;//a.x和b.x和不相等的时候按照x从小到大排序
    else
    return a.y<b.y;//否则按照y从大到小排序
}

ssd[0].x=1;
ssd[0].y=2;
ssd[1].x=4;
ssd[1].y=2;
ssd[2].x=8;
ssd[2].y=4;

sort(ssd,ssd+3,cmp1);

容器排序

按照字典序排序
 string str[3]={"aa","bb","cc"};
 sort(str,str+3);//按照字典序进行排序
按照字符串长度进行排序
bool cmp(string a,string b){
    return a.length()>b.length();
}

sort(str,str+3,cmp);

lower_bound()和upper_bound()

lower_bound()需要一个有序容器或者数组,其寻找[first,end)范围内第一个大于等于val的元素的位置,如果是数组就返回指针,如果是容器就返回迭代器

upper_bound()需要一个有序容器或者数组,其寻找[first,end)范围内第一个大于val的元素的位置,如果是数组就返回指针,如果是容器就返回迭代器

猜你喜欢

转载自www.cnblogs.com/mengxiaoleng/p/11405807.html