3D矢量对象无法正常工作

时间:2012-03-04 21:05:04

标签: c++ vector multidimensional-array

我一直致力于为代码练习创建RPG格斗模拟游戏。单个“战斗”构成基于轮次数,战斗机数量和每个轮次中的滚动数(每个战斗机中)的3D矢量。经过几个小时的搜索,我把这段代码放在一起。我知道有更简单的方法来实现这一点(提升/矩阵等...)但我想完成这个并了解我的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;

      }
}

上面的代码应该创建一个3D矢量'结果',它应该在每轮每个玩家的单元格内存储骰子。它在执行期间崩溃而不显示错误。我怀疑这个错误是我在3d矢量中存储值的方式

1 个答案:

答案 0 :(得分:1)

你是对的 - 你的结果变量是一个矢量向量的向量。在你的战斗循环中,你试图将push_back推入最里面的向量,但是外部的两个向量还没有定义任何内容。

你还需要push_back一个i和j的条目(相应的子类型,例如vector&lt; vector&lt; int&gt;&gt;,然后vector&lt; int&gt ;,来使用向量这种时尚。

修改

例如:

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;

  }