• STL:C++标准容器库 :vector 3


    vector 的删除

    1.删除最后一个  vec_stu.pop_bace

    2.删除指定位置  vec_stu.erase(vec_stu.begin())

    3.删除指定范围  vec_stu.erase(vec_stu.begin()+1,vec_stu.end()-1);

    4.删除多值    先进行查找 然后循环删除

    5.删除所有    vec_stu.clear();

    void show(const Student &stu)
    {
        stu.showStu();
    }
    
    class Find_lisi
    {
     public:
        bool operator ()(const Student &stu1)
        {
            if(stu1.name == "lisi")
                return true;
            else
                return false;
        }
    };
    
    int main()
    {
            vector<Student> vec_stu;
            vec_stu.push_back(Student("lisi",22));
            vec_stu.push_back(Student("lisi",25));
            vec_stu.push_back(Student("wangwu",28));
            vec_stu.push_back(Student("lisi",29));
            vec_stu.insert(vec_stu.begin(),2,Student("xiaoli",52));
            for_each(vec_stu.begin(),vec_stu.end(),show);
            cout<<"-----------------------"<<endl;
    //        vec_stu.pop_back();   //删除尾
    //        vec_stu.erase(vec_stu.begin());//指定位置
    //        vec_stu.erase(vec_stu.begin()+3,vec_stu.end()-1);//指定范围
            vector<Student>::iterator ist = vec_stu.begin();
    //        ist=find_if(ist,vec_stu.end(),Find_lisi());//单值查找删除
    //        if(ist!=vec_stu.end())
    //        vec_stu.erase(ist);
    //        else
    //            cout<<"not find"<<endl;
    
            while((ist=find_if(ist,vec_stu.end(),Find_lisi()))!=vec_stu.end())//多值查找删除
            {
                         vec_stu.erase(ist);
            }
            for_each(vec_stu.begin(),vec_stu.end(),show);
    }

    vector的比较

    vector1 /=/!=/>=/<vector2  运算符比较,比较的不是容器大小,而是容器内的值

    equal()          通用算法比较是否相等,参数1容器1的开始,参数2容器1的比较范围,参数3容器2的开头

            if(equal(vec_stu.begin(),vec_stu.end(),vec_stu2.begin()))
             cout<<"aa"<<endl;
                    else
                    cout<<"bb"<<endl;
    
            if((vec_stu == vec_stu2))
                cout<<"vec_stu == vec_stu2"<<endl;
            else
                cout<<"vec_stu != vec_stu2"<<endl;
            if(equal(vec_stu.begin(),vec_stu.end(),vec_stu2.begin(),cmpname))
                cout<<"vec_stu == vec_stu2"<<endl;
            else
                cout<<"vec_stu != vec_stu2"<<endl;

    排序  1.sort 参数1起始位置。参数2结束为止 一般数据结构可直接排序,如果是一个类的对象,则需要自己去重新进行 操作符重载,重载后声明为友元

    2.在上面基础加上一个自己定义的比较函数(可自行定义为升序、降序)

    //        sort(vec_stu.begin(),vec_stu.end());  //学生类型 需要进行操作符重载
            sort(vec_stu.begin(),vec_stu.end(),cmpage);//自定义排序函数
            for_each(vec_stu.begin(),vec_stu.end(),show);

    统计  count  参数1开始为止  参数2截止为止  参数3 比较内容  返回值int 个数

    count_if   参数1开始为止  参数2截止为止  参数3  小括号操作符重载

            int n = count(vec_stu.begin(),vec_stu.end(),Student("wangwu",0));
            cout<<n<<endl;
    
            n = count_if(vec_stu.begin(),vec_stu.end(),Find_lisi());
            cout<<n<<endl;

    去重:unique()只能去除连续重复,不能改变容器的大小  所以需要进行排序  然后去重  最后改变容器的大小

    或者自己写算法来进行去重

    vector容器的特点:

    1.底层是数组实现的(可以通过下标来进行查找)

    2.效率:查找效率高,增删效率低

    3.无序容器(不会自动排序)

    4.允许重复值存在

  • 相关阅读:
    search
    longestValidParentheses
    nextPermutation
    linux下通过安装xampp搭建环境卸载xampp、以及网站搬家-64位系统Apache启动不了的问题
    对拍器 ADC-ACMDataCreater
    Educational Codeforces Round 86 (Rated for Div. 2) A~D
    Codeforces Round #637 (Div. 2) A~D
    Codeforces Round #636 (Div. 3) A~D
    Codeforces Round #635 (Div. 2) A~D
    原型设计工具比较及实践 基于WolframAlphaAPI的科学计算器原型设计
  • 原文地址:https://www.cnblogs.com/xiaozoui11cl/p/12785567.html
Copyright © 2020-2023  润新知