💿一个串联前文的例子
通过一个例子,复习巩固已经学习的STL的用法
最后更新于
通过一个例子,复习巩固已经学习的STL的用法
最后更新于
class Student
{
private:
int no;
string name;
Sex sex;
string birth_place;
Major major;
// ......
public:
// ......
int get_no() { return no; }
string get_name() { return name; }
int get_sex() { return sex; }
Major get_major() { return major; }
display();
// ......
};vector<Student> students; // 创建学生容器
while (...) // 循环输入每个学生信息并放入容器
{
Student st;
...... // 输入一个学生信息到st
students.push_back(st); // 把st数据放入容器
}bool compare_no(Student &st1, Student &st2)
{
return st1.get_no() < st2.get_no();
}sort(students.begin(), students.end(), compare_no);void display(Student &st) //显示st的信息
{
st.display();
cout << endl;
}for_each(students.begin(), students.end(), display);bool match_major(Student &st) { return st.get_major() == COMPUTER; }cout << count_if(students.begin(), students.end(), match_major);bool match_major2(Student &st) { return st.get_major() == PHYSICS; }cout << count_if(students.begin(), students.end(), match_major2);class MatchMajor
{
Major major;
public:
MatchMajor (Major m) { major = m; }
bool operator ()(Student& st) { return st.get_major() == major; }
};count_if(students.begin(), students.end(), MatchMajor(COMPUTER));
count_if(students.begin(), students.end(), MatchMajor(PHYSICS));
// 统计XXX专业的人数
count_if(students.begin(), students.end(), MatchMajor(XXX));class MatchMajorAndSex
{
Major major;
Sex sex;
public:
MatchMajorAndSex(Major m,Sex s) { major = m; sex = s; }
bool operator ()(Student& st)
{
return st.get_major() == major && st.get_sex() == sex;
}
};// 计算机女生
count_if(students.begin(),students.end(), MatchMajorAndSex(COMPUTER,FEMALE));
// 物理男生
count_if(students.begin(),students.end(), MatchMajorAndSex(PHYSICS,MALE));//统计“计算机专业女生”的人数
cout << "计算机专业女生的人数是:"
<< count_if(students.begin(),students.end(),
[](Student &st) { return (st.get_major() == COMPUTER)
&& (st.get_sex() == FEMALE); });
//统计出生地为"南京籍计算机专业"的学生人数
cout << "出生地为\"南京\"的学生人数是:"
<< count_if(students.begin(),students.end(),
[](Student &st) { return (st.get_major() == COMPUTER)
&& (st.get_birth_place().find("南京")!= string::npos);});
//按“学号由小到大”对students的元素进行排序
sort(students.begin(),students.end(),
[](Student &st1,Student &st2) {
return st1.get_no()<st2.get_no();});
//按“姓名由小到大”对students的元素进行排序
sort(students.begin(),students.end(),
[](Student &st1,Student &st2) {
return st1.get_name()<st2.get_name();});