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