【模板】STL类属算法

#include <bits/stdc++.h>
using namespace std;

class GreaterThan50
{
public:
    bool operator() (int x) const {return x>50;}
};

int main()
{
    vector <int> v1;
    vector <int> v2(20);
    for(int i=0;i<=19;i++)
    {
        v1.push_back(i*i);
    }
    vector<int>::iterator where;
    vector<int>v2(10);
    v2[0]=1;v2[1]=2;v2[2]=5;v2[3]=6;v2[4]=4;v2[5]=3;v2[6]=2;v2[7]=5;v2[8]=5;v2[9]=6;
    int a[20]={1,2,5,6,4,3,2,5,5,6,9,8,7,5,5,4,4,4,1,2};
    /////////////////
    where=find_if(v1.begin(),v1.end(),GreaterThan50());//查找第一个大于50的元素的位置
    cout<<*where<<endl;//*where=64;
    /////////////////
    where=find(v1.begin(),v1.end(),9);//区间查找某元素,找到返回第一次出现的位置,没找到返回end();
    cout<<*where<<endl;
    where=find(v1.begin(),v1.end(),10);
    if(where==v1.end()) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    ////////////////
    where=adjacent_find(v1.begin(),v1.end());//区间查找第一对相邻且相等的元素对,如果找到返回第一个元素的位置,没找到返回end();
    cout<<*where<<endl;
    where=adjacent_find(v1.begin(),v1.end());
    if(where==v1.end()) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    ////////////////
    cout<<count(&a[0],&a[19],5)<<endl;//区间查找某元素的个数
    ///////////////
    if(equal(&a[0],&a[9],v1.begin())) cout<<"相同"<<endl;//对于两个区间比较,[first1,last1)和[first2,first2+last1-first1),若相同返回true;
    else cout<<"不同"<<endl;
    ///////////////
    string st1="asdfhghjhkl";
    string st2="fhghjhk";
    string::iterator it;
    it=search(st1.begin(),st1.end(),st2.begin(),st2.end());//判断后一个区间是否为前一个区间的子串,是返回第一次出现的位置,不是返回last1;可用于其他容器
    cout<<*it<<endl;
    //////////////
    cout<<"&&&&&"<<endl;
    vector<int> v4(v2.size());//重点!!!初始定义时就应该定义长度只可以大不可以小!!!
    copy(v2.begin(),v2.end(),v4.begin());//把一个区间复制到另一个区间,两者容器相同
    for(where=v4.begin();where!=v4.end();where++)
    {
        cout<<*where<<' ';
    }
    cout<<endl;
    /////////////
    fill(v2.begin(),v2.end(),2333);//区间赋值
    for(where=v2.begin();where!=v2.end();where++)
    {
        cout<<*where<<' ';
    }
    cout<<endl;
    /////////////
    replace(&st1[0],&st1[10],'g','h');//区间替换一个元素为另一个元素
    cout<<st1<<endl;
    /////////////
    remove(v1.begin(),v1.end(),9);//区间删除单个元素,其他元素间位置不改变
    for(where=v1.begin();where!=v1.end();where++)
    {
        cout<<*where<<' ';
    }
    cout<<endl;
    ////////////
    sort(v4.begin(),v4.end(),greater<int>());//降序
    for(where=v4.begin();where!=v4.end();where++)
    {
        cout<<*where<<' ';
    }
    cout<<endl;
    sort(v4.begin(),v4.end(),less<int>());//升序
    for(where=v4.begin();where!=v4.end();where++)
    {
        cout<<*where<<' ';
    }
    cout<<endl;
    ////////////
    //lower_bound()和upper_bound()只能用于升序,不可用于降序
    where=lower_bound(v4.begin(),v4.end(),5);//返回第一个大于等于x的迭代器
    cout<<*where<<endl;
    where=lower_bound(v4.begin(),v4.end(),5.5);
    cout<<*where<<endl;
    where=upper_bound(v4.begin(),v4.end(),5);//返回第一个大于x的迭代器
    cout<<*where<<endl;
    ///////////
    return 0;
}
0%