3D векторный объект не работает правильно - PullRequest
0 голосов
/ 05 марта 2012

Я работал над созданием боевого симуала RPG для практики кода.Один «бой» представляет собой трехмерный вектор, основанный на количестве раундов, количестве бойцов и количестве бросков (на бойца в каждом раунде) в этом порядке.После нескольких часов поиска я собрал этот код.Я знаю, что есть более простые способы сделать это (повышение / матрица и т. Д.), Но я хочу закончить это и узнать, где мои STL::vector манипуляции идут не так

#include <vector>
#include <algorithm>

using namespace std;

class Combat{
    private:
        int numberOfRounds;
        int numberOfCombatants;
        int numberOfRolls;
        int sidesDie;            
        vector <vector <vector <int> > > result;

    public:
        void printMenu();
        void battle();
        void printResult();
        int roll(int die);
};
int Combat::roll(int die)
{
    die=sidesDie;
    srand(time(0));
    int r=(1+rand()%die);
    return r;

void Combat::battle(){
    cout<<setw(10)<<" Computing results of battle ...\n";
    int i,j,k;
    for (i=0;i<numberOfRounds;++i){
        cout<<"Round number "<<i+1;
        for(j=0;j<numberOfCombatants;++j){
            for(k=0;k<numberOfRolls;++k){
                result[i][j].push_back(roll(sidesDie));

            }
            cout<<endl;
        }

        cout<<endl;

      }
}

Предполагается, что приведенный выше кодсоздайте трехмерный векторный «результат», который должен хранить броски кубиков внутри клеток на игрока за раунд.Сбой во время выполнения без отображения ошибки.я подозреваю, что ошибка заключается в том, что я храню значения внутри трехмерного вектора

1 Ответ

1 голос
/ 05 марта 2012

Вы правы - ваша переменная результата является вектором вектора вектора целых.В вашем боевом цикле вы пытаетесь вставить push_back во внутренний вектор, но у внешних двух векторов еще не определено какое-либо содержимое.

Вам также нужно будет push_back запись для i и j (соответствующего подтипа, например vector >, а затем vector , чтобы использовать вектор таким образом.

edit

Например,:

int i,j,k;
vector<vector<int>> iType;
vector<int> jType;
for (i=0;i<numberOfRounds;++i)
{
    cout<<"Round number "<<i+1;
    result.push_back( iType );
    for(j=0;j<numberOfCombatants;++j)
    {
        result[i].push_back( jType );
        for(k=0;k<numberOfRolls;++k)
        {
            result[i][j].push_back(roll(sidesDie));

        }
        cout<<endl;
    }

    cout<<endl;

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