zoukankan      html  css  js  c++  java
  • 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.允许重复值存在

  • 相关阅读:
    事件对象3
    事件对象2
    事件对象1
    编码、摘要、加密
    身份证号码的组成
    Oracle的TO_CHAR()格式化数字为百分数的字符串
    转载和补充:Oracle中的一些特殊字符
    linux Shell(待学)
    linux 管道相关命令(待学)
    linux用户权限、系统信息相关命令(待学)
  • 原文地址:https://www.cnblogs.com/xiaozoui11cl/p/12785567.html
Copyright © 2011-2022 走看看