C ++指针和队列

时间:2016-02-18 08:59:15

标签: c++ algorithm

我试图制作一个让两支球队相互竞争的计划。每支球队都有相同数量的球员。让我们说球队1有球员A,B,C,D,球队2有球员E,F,G,H 在第1轮,玩家A与玩家E对抗。让我们说A赢了。然后A回到他的团队(我把它变成队列),所以团队1现在有玩家B,C,D,E。B进入失败者堆栈(所以我从团队2中弹出它并将其推送到新的队列叫做失败者堆栈。) 然后在第2轮,玩家B与玩家F对抗。依此类推,直到只有1支球队离开球员。

我无法弄清楚这样做的算法。我不是在寻找特定的代码(或任何人来做我的工作),我只是想了解人们如何做到这一点。我还没有学习映射,我只允许指针和基本功能。我的猜测是我必须做一些for循环,比如:

for (int i = 0; i < 4; i++){         //this is the loop for team 1, with 4 players
   for (int j = 0; j < 4; j++) {     //this is the for loop for team 2
       //this is the part I need help with:
       //somehow I need to call a player from team 1 from the queue
       //and also call a player from team 2
   }
}

有没有办法从队列中调用某些东西?任何意见,将不胜感激。非常感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

使用std::queue的两个实例 - 每个团队一个。在开始时,与玩家一起填充它们。然后,执行一个for循环迭代rouds。在每一轮中,使用std::queue::pop来获得每个团队的下一个玩家。选中获胜的玩家后,使用push将获胜的玩家带回团队的队列末尾。

答案 1 :(得分:0)

int fight(Player &p1, Player &p2)
{
    int result = 0; // 1 if p1 wins, 2 if p2 wins
    // ...
    return result;
}

然后你可以这样做:

std::queue<Player> team1;

std::queue<Player> team2;

std::queue<Player> losers;
while(team1.size() > 0 && team2.size() > 0) {

Player p1 = team1.front();
team1.pop();

PLayer p2 = team2.front();
team2.pop();

int result = fight(p1, p2);

if(result == 1) {
    team1.push(p1);
    losers.push(p2);
} else {
    team2.push(p2);
    losers.push(p1);
}
}