通过向量中的对象的数据成员迭代
Iterating through data members of an object in a vector
我正在尝试通过id
属性在两个类之间实现一种关系。SoccerTeams
中的teamId
班级必须与managing_directors
课程中董事的directorId
相同,以便将董事总经理分配给足球队。
两个类分别具有向量teams
和man_dirs
。
class SoccerTeams {
string teamName;
int teamId;
friend class managing_directors;
public:
//teams vector
vector<SoccerTeams> teams;
void addTeam(string name, int id) {
SoccerTeams newTeam(name, id);
teams.push_back(newTeam);
};
SoccerTeams(){};
SoccerTeams(string teamName, int id){
teamName = teamName;
teamId = id;
};
~SoccerTeams(){};
};
//managing directors of a soccer team
class managing_directors : public SoccerTeams, public people {
int directorId;
public:
//man_dirs vector
vector<managing_directors> man_dirs;
managing_directors(int num_of_managers, int avg_age);
managing_directors(){};
~managing_directors(){};
void addDirector(string name, char sex, int age, int id) {
managing_directors newDirector;
newDirector.name = name;
newDirector.sex = sex;
newDirector.age = age;
newDirector.directorId = id;
man_dirs.push_back(newDirector);
};
我尝试制作一个函数来检查taking_directors类中的团队ID。
int idChecker(int id) {
for (vector<SoccerTeams>::const_iterator i = teams.begin(); i != teams.end(); ++i) {
if(i -> teamId == id)
return 1;
}
return 0;
}
但是该函数始终返回0,我认为这是因为它没有检查在主函数中创建的团队向量的相同实例,因为当我尝试在managing_directors
类中打印此teams
向量时,它是空的。是否可以使teams
向量全局?这是解决此问题的正确方法吗?
managing_directors
继承的人类的定义(以防万一(
class people {
string name;
char sex;
int age;
bool under_auth;
int auth_level;
friend class managing_directors;
public:
people(){};
~people(){};
virtual int get_age(){ return this->age; };
};
更新:
我固定了一个答案中给出的循环,但我认为这不是问题,因为该功能仍然返回0。我尝试使用COUT尝试打印所有ID,而我在输出,它是空的。
我做了这样的事情
int idChecker(int id) {
for (vector<SoccerTeams>::const_iterator i = teams.begin(); i != teams.end(); ++i) {
cout << i - > teamId << endl; //test code
if(i -> teamId == id)
return 1;
}
return 0;
}
您的循环是错误的。在
中for (vector<SoccerTeams>::const_iterator i = teams.begin(); i != teams.end(); ++i) {
if(i -> teamId == id)
return 1;
return 0;
}
如果第一个i
不匹配,则立即返回0。您需要做的就是将return 0;
从for循环中移出,因此在循环找不到匹配时,只有在返回0。给你
int idChecker(int id) {
for (vector<SoccerTeams>::const_iterator i = teams.begin(); i != teams.end(); ++i) {
if(i -> teamId == id)
return 1;
}
return 0;
}
您还可以使用基于循环的范围来简化此范围,例如
int idChecker(int id) {
for (const auto& e : teams)
if(e.teamId == id)
return 1;
return 0;
}
您也可以使用 std::any_of
和lambda,例如
int idChecker(int id) {
return std::any_of(teams.begin(), teams.end()
[=](const auto& e) { return e.teamId == id; });
}
相关文章:
- 迭代时从向量和内存中删除对象
- 使用迭代器时如何访问对象在向量中的位置?
- std::list 中的迭代器感知对象
- 为什么在指向对象的迭代器上调用函数不允许我更改对象本身?
- 如何在 Cheerp/js 中迭代动态命名的对象?
- C++:返回一个基于范围 for 循环迭代器,其中包含继承对象
- 无法使用迭代器查找类对象。(二进制 '==': 'userInfo' 不定义此运算符)
- 循环中本地对象的析构函数是否保证在下一次迭代之前被调用?
- 使用二进制搜索树中的迭代器对象访问左侧节点
- 指向临时对象的自定义迭代器(延迟加载)
- C++ 迭代后销毁对象的问题
- 迭代器和标量对象之间的未定义行为有什么区别吗?
- 如何确定迭代器在 c++ 模板函数中指向的对象的类型?
- 在多个 STL 对对象上创建迭代器
- 迭代 Napi::对象属性(键)在 Node.js C++ N-API 中
- 如何迭代指针指向的对象列表?
- 访问执行策略for_each函数对象中的迭代器
- 在包含类对象的C++中迭代映射
- C++ 向量::使用类对象迭代器擦除不擦除向量成员
- 列表<对象*>迭代器中的分段错误