迭代向量

时间:2017-04-24 13:04:33

标签: c++ vector

我正在尝试在具有id属性的2个类之间实现某种关系。 teamId课程中的SoccerTeams必须与directorId课程中导演的managing_directors相同,以便将总经理分配给足球队。

两个类分别有一​​个向量teamsman_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);
    }; 

我尝试在manage_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,我相信这是因为它没有检查在main函数中创建的团队向量的相同实例,因为当我尝试在teams类中打印这个managing_directors向量时,它是空的。是否有可能使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;
}

1 个答案:

答案 0 :(得分:4)

你的循环错了。在

brew unlink vim

如果第一个for (vector<SoccerTeams>::const_iterator i = teams.begin(); i != teams.end(); ++i) { if(i -> teamId == id) return 1; return 0; } 不匹配,那么你立即返回0.你需要做的是将i移出for循环,这样你只有在循环找不到时才返回0比赛。这给了你

return 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;
}

你也可以使用std::any_oflambda之类的

int idChecker(int id) {
    for (const auto& e : teams)
        if(e.teamId == id)
            return 1;
    return 0;
}