是小邹啊

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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.允许重复值存在

posted on 2020-04-27 14:01  是小邹啊  阅读(307)  评论(0编辑  收藏  举报