📅  最后修改于: 2023-12-03 15:08:01.300000             🧑  作者: Mango
在C++中,我们常常需要在对象向量中查找成员变量。本文将介绍如何使用STL中的算法来实现该功能。
STL中的find_if算法用于在容器中查找某个元素。它的语法如下:
template<class InputIterator, class UnaryPredicate>
InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred);
其中,first和last分别指向容器中要查找的元素的起始位置和终止位置。pred是一个一元谓词,用于判断当前元素是否符合要求。如果查找成功,则返回指向该元素的迭代器;否则返回last。
假设有一个存储学生信息的类:
class Student {
public:
Student(string name, int age) : name(name), age(age) {}
string getName() const { return name; }
int getAge() const { return age; }
private:
string name;
int age;
};
我们现在有一个存储了若干个学生信息的向量:
vector<Student> students;
students.push_back(Student("Tom", 20));
students.push_back(Student("Jerry", 21));
students.push_back(Student("Lily", 19));
现在,我们要查找名为Jerry的学生,可以使用find_if算法:
auto it = find_if(students.begin(), students.end(), [](const Student& s) {
return s.getName() == "Jerry";
});
if (it != students.end()) {
cout << "Found! Age is " << it->getAge() << endl;
} else {
cout << "Not found!" << endl;
}
输出结果为:
Found! Age is 21
使用STL中的find_if算法可以很方便地在对象向量中查找成员变量。需要注意的是,我们需要提供一个一元谓词来判断当前元素是否符合要求。