Создание и заполнение вектора в цикле - PullRequest
0 голосов
/ 05 марта 2019

У меня есть класс Player, у которого есть идентификатор, цвет и имя.

У меня также есть вектор игроков.

Я хотел бы создать 50 игроков.10 игроков за цвет.Имея в виду 10 игроков в красном, 10 в черном и т. Д.Но я не думаю, что создание и вставка их вручную - лучший способ сделать это.

Я хотел бы создать цикл, в котором я буду создавать игрока и добавлять его в вектор. Я просто не надеваюне знаю, как придать разный цвет каждому десятому игроку ..

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Вот быстрый и грязный пример того, что вы можете сделать, код имеет внешний цикл, который перебирает цвета и создает 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;
}
0 голосов
/ 05 марта 2019

Цвета могут быть сохранены в векторе динамически и затем доступны с помощью векторного итератора, который является более быстрым методом.Цикл для перебора векторов и еще один для создания 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;
}
0 голосов
/ 05 марта 2019

Не уверен, что если вы хотите, чтобы игроки были пронумерованы как 1 - 10 пять раз или как 1 - 50 один раз, вы можете исправить это при необходимости.Хитрость с цветами состоит в том, чтобы просто создать индексированный индекс на основе i / 10:

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

class Player {
public:
    const unsigned    id;
    const std::string color;
    const std::string name;

    void display() const { std::cout << id << ' ' << color << ' ' << name << '\n'; }

    Player() = delete;
    Player(unsigned i, const std::string& c, const std::string& n) :
        id(i),
        color(c),
        name(n)
    {}
};

int main() {
    const char* colors[] = { "red", "black", "blue", "green", "white" };

    std::vector<Player> players;
    for (unsigned i = 0; i < 50; ++i)
        players.emplace_back(Player(
            i + 1,
            colors[i / 10],
            "player" + std::to_string(i + 1)
        ));

    for (const Player& player : players)
        player.display();

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...