ACM学习历程5——算法设计中常用的函数

STL中有很多可以直接使用的算法,例如在<numeric>和<algorithm>等头文件中定义了许多方法,这些方法只需要算法设计的过程中加入相应的头文件即可使用,下面介绍一些常用的算法。

Sort排序,实际上是快速排序,可以对vector、string、数组等进行排序,缺省情况下sort是升序排列。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(3);
    v.push_back(-1);
    v.push_back(8);
    sort(v.begin(),v.end());
    for(int i=0; i<v.size(); i++)
        cout<<v[i]<<' ';
    cout<<endl;
    return 0;
}
输出结果:-1  1  3  8

sortt默认是升序排列,若要降序排列,自定义比较函数即可:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//自定义比较函数
bool comp(int a,int b)
{
    if(a!=b)
        return a>b;
    else
        return b<a;
}
int main()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(3);
    v.push_back(-1);
    v.push_back(8);
    v.push_back(22);
    sort(v.begin(),v.end(),comp);
    for(int i=0; i<v.size(); i++)
        cout<<v[i]<<' ';
    cout<<endl;
    return 0;
}
输出结果:22  8  3  1  -1

Sor对数组排序和String类型同样可以排序:

对数组排序:

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    int a[5]= {1,5,2,-1,4};
    sort(a,a+5);
    for(int i=0; i<5; i++)
        cout<<a[i]<<' ';
    cout<<endl;
    return 0;
}
输出结果:-1  1  2  4  5

String类型排序:

#include<iostream>
#include<string>
#include<algorithm>

using namespace std;
int main()
{
    string s="asgfhyh1";
    sort(s.begin(),s.end());
    cout<<s<<endl;
    return 0;
}
输出结果:1afghhsy,输出结果按照ASCII顺序排列。

stable_sort(first,last)归并排序,默认也是升序:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(3);
    v.push_back(-1);
    v.push_back(8);
    stable_sort(v.begin(),v.end());
    for(int i=0; i<v.size(); i++)
        cout<<v[i]<<' ';
    cout<<endl;
    return 0;
}
输出结果:-1  1  3  8

min_element(first,last)寻找范围内最小值,返回迭代器:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    vector<int> v;
    vector<int> ::iterator pos;
    v.push_back(1);
    v.push_back(3);
    v.push_back(-8);
    v.push_back(8);
    pos=min_element(v.begin(),v.end());
    cout<<*pos<<endl;
    return 0;
}
输出结果:-8

max_element(first,last)寻找范围内最大值,返回迭代器:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    vector<int> v;
    vector<int> ::iterator pos;
    v.push_back(1);
    v.push_back(3);
    v.push_back(-8);
    v.push_back(8);
    pos=max_element(v.begin(),v.end());
    cout<<*pos<<endl;
    return 0;
}
输出结果:8

Copy(first,last,result):将firstlast区间的元素复制到result中:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    int myints[]= {10,20,30,40,50,60,70};
    vector<int> myvector;
    vector<int>::iterator it;
    myvector.resize(7);
    copy ( myints, myints+7, myvector.begin() );
    for(int i=0; i<myvector.size(); i++)
        cout<<myvector[i]<<" ";
    cout<<endl;
    return 0;
}

Copy()函数字符串数组同样是适用:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
    char s[24]="123456789";
    char s1[24]="";
    copy(s,s+5,s1);
    cout<<s1<<endl;
    return 0;
}

Remove(first,last,value):将区间firstlast区间中值为value的元素删除

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    int num[]= {1,2,3,4,5,1,0};
    int *pbegin=num;
    int *pend=num+sizeof(num)/sizeof(int);
    pend=remove(pbegin,pend,1);
    for(int *p=pbegin; p!=pend; p++)
        cout<<*p<<" ";
    cout<<endl;
    return 0;
}

Fill(first,last,value):将区间firstlast区间全部初始为value

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    vector<int> v(8);
    fill(v.begin(),v.end(),1);
    for(int i=0; i<v.size(); i++)
        cout<<v[i]<<" ";
    cout<<endl;
    return 0;
}

Find(first,last,value):查找firstlast区间第一个值为value元素的位置,返回一个迭代器

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int main()
{
    int num[]= {1,2,3,4,5};
    int *p;
    p=find(num,num+5,3);
    if(p==num+5)
        cout<<"Not found!"<<endl;
    else
        cout<<*p<<endl;

    return 0;
}

itoa c语言的一个函数,它不是标准定义下的C语言,itoa取整数输入值,并将其转换为相应进制数字的字符串

#include <stdio.h>
#include <stdlib.h>
int main ()
{
    int i=1750;
    char buffer [33];
    itoa (i,buffer,10);
    printf ("decimal: %s\n",buffer);
    itoa (i,buffer,16);
    printf ("hexadecimal: %s\n",buffer);
    itoa (i,buffer,2);
    printf ("binary: %s\n",buffer);
    return 0;
}

atoi把字符串转换成整型数的一个函数

#include <stdio.h>
#include <stdlib.h>
int main ()
{
    int data;
    data=atoi("123");
    printf("%d\n",data);
    return 0;
}

更多函数的使用和说明,可以查看C/C++的帮助手册。

    原文作者:五大常用算法
    原文地址: https://blog.csdn.net/u010480899/article/details/52290792
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞