在循环内创建和填充向量

时间:2019-03-05 03:16:07

标签: c++ c++11

我有一个具有ID,颜色和名称的Player类。

我还有一个玩家向量。

我想创建50位玩家。每种颜色10个玩家。红色代表10位玩家,黑色代表10位玩家。

我可以做一些类似的事情:

Player player1(1, "black", "player1");

然后将其添加到向量中:

players.addPlayer(&player1);

但是我不认为手动创建和插入它们是执行此操作的最佳方法。

我想创建一个循环,在该循环中创建播放器并将其添加到向量中。我只是不知道如何为每10位播放器赋予不同的颜色。

3 个答案:

答案 0 :(得分:1)

不确定是否要将播放器编号为1-10次五次或一次为1-50次,可以根据需要进行修复。使用颜色的技巧是仅使数组基于population.append(mutate(fittest[:])) 进行索引:

i / 10

答案 1 :(得分:1)

这是您可能会做的一个快速而肮脏的示例,该代码具有一个外部循环,可以循环遍历颜色并为每种颜色创建10个播放器实例。

#include <iostream>
#include <sstream>
#include <string>
#include <vector>

using namespace std;

class Player {
public:
    Player(int id, string color, string name) : 
        _id(id), _color(color), _name(name) {
    }

    int getId() { return _id; }
    string getColor() { return _color; }
    string getName() { return _name; }

    string toString() {
        ostringstream ss;
        ss << _id << "," << _color << "," << _name;
        return ss.str();
    }
private:
    int _id;
    string _color;
    string _name;
};

int main() {
    vector<Player> players;
    int playerId = 0;
    for (auto color : {"black", "blue", "green", "cyan", "red"}) {
        for (int i = 0; i < 10; ++i) {
            playerId++;
            players.emplace_back(Player(playerId, color, "Player" + to_string(playerId)));
        }
    }

    for (auto p : players) {
        cout << p.toString() << endl;
    }
    return 0;
}

答案 2 :(得分:0)

可以将颜色动态存储在向量中,然后使用向量迭代器进行访问,这是一种更快的方法。一个循环遍历向量的循环和一个循环以每种颜色创建10个播放器的循环就足以满足您的要求。下面提供了您的方法示例,可以根据您的要求更改播放器命名:

#include <iostream>
#include <string>
#include <vector>

class Player
{
public:
    Player(int id, std::string color, std::string name);
    void Display();
    int _id;
    std::string _color;
    std::string _name;
};

Player::Player(int id, std::string color, std::string name)
{
    _id = id;
    _color = color;
    _name = name;
}

void Player::Display()
{
    std::cout << _id << ' ' << _color << ' ' << _name << '\n';
}

int main(int argc, const char * argv[])
{
    std::vector<Player*> players;
    std::vector <std::string> colour;
    colour.push_back("Black");
    colour.push_back("Red");
    colour.push_back("Orange");
    colour.push_back("Yellow");
    colour.push_back("Blue");

    int id = 1;

    for(std::vector<std::string>::iterator it = colour.begin(); it != colour.end(); it++)
    {
        for(int i=0; i<10; i++)
        {
            std::string player = "player";
            std:: string name = player + std::to_string(id);
            Player* player1 = new Player(id, (*it), name);
            players.push_back(player1);
            player1->Display();
            id++;
        }
    }

    return 0;
}