创建一个数组以迭代成员的两个数组

Corentin S.

我正在玩纸牌游戏。

在这个游戏中,我有一些玩家,他们是团队的成员(每个团队2位玩家),并且他们可以加入大厅。

因此,大厅有一个团队成员,而两个团队都有一个玩家成员。我想直接遍历玩家,而不必每次都经过团队。

相关的C ++代码:

大厅

class Lobby {

public:
    Lobby(std::string const& name, std::vector<Team> const& teams = std::vector<Team>());
    Lobby(){};
    ~Lobby();

    // give cards to all players
    void deal();

    std::vector<std::shared_ptr<Player> > getPlayers(); // this is the one I'm trying to implement

   [...]

private:
    std::string _name;
    std::vector<Team> _teams;
};

大厅.cpp

[...]
void Lobby::deal()
{
    vector<Card> cards = Card::getAllCardsShuffled();

    for (int i = 0; i < cards.size(); i++) {
        getPlayers()[i % 4].addCard(cards[i]); // this is how I'd like to use getPlayers()
    }
    cout << _teams[0].getPlayers().at(0).getCards().size() << endl;
    // this compiles but I'm not getting any cards in my players (prints 0)
    // I think a copy is made somewhere, so I'm always getting new players
}


// this is the method I'm trying to implement... 
vector<shared_ptr<Player> > Lobby::getPlayers()
{
    return {
        make_shared<Player>(_teams[0].getPlayers().at(0)),
        make_shared<Player>(_teams[0].getPlayers().at(1)),
        make_shared<Player>(_teams[1].getPlayers().at(0)),
        make_shared<Player>(_teams[1].getPlayers().at(1))
    };
}
[...]

团队

class Team {
public:
    Team();
    Team(std::string name);
    ~Team();
    void addPlayer(Player const& player);
    void addTrick(Trick const& trick);
    void setScore(int const& newScore);
    void addPoints(int const& score);
    int getScore();
    std::vector<Trick> getTricks();

    std::vector<Player>& getPlayers();
    bool isTeamDealing();

private:
    std::string _name;
    std::shared_ptr<std::vector<Player> > _players;
    int _score;
    std::vector<Trick> _wonTricks;
};

team.cpp

Team::Team(string name)
    : _name(name)
    , _score(0)
    , _players(vector<Player>())
{
}

void Team::addPlayer(Player const& player)
{
    if (_players.size() < 2) {
        _players.push_back(player);
    }
}

vector<Player>& Team::getPlayers()
{
    return _players;
}
[...]

现在,在遍历团队然后再遍历玩家时,代码可以正常工作:

void Lobby::deal()
{
    vector<Card> cards = Card::getAllCardsShuffled();

    for (int i = 0; i < cards.size(); i += 4) {
        _teams[0].getPlayers().at(0).addCard(cards[i]);
        _teams[0].getPlayers().at(1).addCard(cards[i + 1]);
        _teams[1].getPlayers().at(0).addCard(cards[i + 2]);
        _teams[1].getPlayers().at(1).addCard(cards[i + 3]);
    }
    cout << getPlayers().at(0)->getCards().size() << endl;
}

...但是我希望能够直接迭代播放器,而无需使用2个嵌套循环。有没有简单的方法可以做到这一点?

TL; DR有没有一种方法可以实现getPlayers(),使我可以遍历玩家的向量并直接对玩家进行变异?

编辑:我更新了Team中的代码,以使Team.getPlayers()返回对向量的引用而不是指针。

Corentin S.

因此,我找到了一种方法,可以使用std::reference_wrapper以下方法满足我的需求

vector<reference_wrapper<Player> > Lobby::getPlayers()
{
    return {
        _teams[0].getPlayers().at(0),
        _teams[0].getPlayers().at(1),
        _teams[1].getPlayers().at(0),
        _teams[1].getPlayers().at(1)
    };
}

void Lobby::deal()
{
    vector<Card> cards = Card::getAllCardsShuffled();

    for (int i = 0; i < cards.size(); i++) {
        getPlayers().at(i % 4).get().addCard(cards[i]);
    }
}

如果有人认为有更好的方法,我会全神贯注。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

创建一个数组以迭代成员的两个数组

来自分类Dev

从两个数组创建一个多维数组

来自分类Dev

如何从两个数组创建一个结构?

来自分类Dev

从两个数组创建一个JavaScript对象

来自分类Dev

添加两个数组以创建一个

来自分类Dev

如何根据条件从两个数组创建一个数组

来自分类Dev

如何基于两个数组创建一个数组

来自分类Dev

如果两个数组中都存在值,则使用KEY创建一个数组?

来自分类Dev

如何从PHP中的两个常规数组创建一个数组

来自分类Dev

如果两个数组键匹配,则使用其值创建一个新数组

来自分类Dev

PHP合并两个数组以创建一个新数组

来自分类Dev

两个数组的最小值创建一个新数组

来自分类Dev

PHP-创建一个具有两个数组匹配项的数组

来自分类Dev

如何从两个数组和一个浮点值创建单个 numpy 特征数组?

来自分类Dev

比较两个数组并使用差异创建一个新数组,考虑重复

来自分类Dev

使用两个数组中的公共元素创建一个新数组

来自分类Dev

如何合并两个数组并为每个迭代分配一个键

来自分类Dev

如果第二个数组是从第一个数组创建的,那么两个数组有哪些依赖关系?

来自分类Dev

在PHP中基于两个表ID创建一个数组

来自分类Dev

用嵌套在两个键中的 JSON 代码创建一个数组

来自分类Dev

合并两个数据源以创建一个对象数组

来自分类Dev

对两个数组进行排序,具体取决于一个数组

来自分类Dev

如何将两个数组合并为一个数组?

来自分类Dev

合并两个数组,从一个数组中删除重复的键

来自分类Dev

在python中将一个数组与其他两个数组进行比较

来自分类Dev

如何将操作分成两个数组并存入一个数组?

来自分类Dev

使用jQuery“ extend”连接两个数组将返回一个数组

来自分类Dev

mongodb-从集合中的两个数组中获取一个数组

来自分类Dev

如何在一个数组上合并两个数组

Related 相关文章

  1. 1

    创建一个数组以迭代成员的两个数组

  2. 2

    从两个数组创建一个多维数组

  3. 3

    如何从两个数组创建一个结构?

  4. 4

    从两个数组创建一个JavaScript对象

  5. 5

    添加两个数组以创建一个

  6. 6

    如何根据条件从两个数组创建一个数组

  7. 7

    如何基于两个数组创建一个数组

  8. 8

    如果两个数组中都存在值,则使用KEY创建一个数组?

  9. 9

    如何从PHP中的两个常规数组创建一个数组

  10. 10

    如果两个数组键匹配,则使用其值创建一个新数组

  11. 11

    PHP合并两个数组以创建一个新数组

  12. 12

    两个数组的最小值创建一个新数组

  13. 13

    PHP-创建一个具有两个数组匹配项的数组

  14. 14

    如何从两个数组和一个浮点值创建单个 numpy 特征数组?

  15. 15

    比较两个数组并使用差异创建一个新数组,考虑重复

  16. 16

    使用两个数组中的公共元素创建一个新数组

  17. 17

    如何合并两个数组并为每个迭代分配一个键

  18. 18

    如果第二个数组是从第一个数组创建的,那么两个数组有哪些依赖关系?

  19. 19

    在PHP中基于两个表ID创建一个数组

  20. 20

    用嵌套在两个键中的 JSON 代码创建一个数组

  21. 21

    合并两个数据源以创建一个对象数组

  22. 22

    对两个数组进行排序,具体取决于一个数组

  23. 23

    如何将两个数组合并为一个数组?

  24. 24

    合并两个数组,从一个数组中删除重复的键

  25. 25

    在python中将一个数组与其他两个数组进行比较

  26. 26

    如何将操作分成两个数组并存入一个数组?

  27. 27

    使用jQuery“ extend”连接两个数组将返回一个数组

  28. 28

    mongodb-从集合中的两个数组中获取一个数组

  29. 29

    如何在一个数组上合并两个数组

热门标签

归档