c++ - 3D vector 对象无法正常工作

标签 c++ vector multidimensional-array

我一直致力于为代码练习创建一个 RPG 战斗模拟游戏。单个“战斗”构成一个 3D vector ,该 vector 基于轮数、战斗机数量和卷数(每轮每个战斗机)的顺序。经过数小时的搜索,我整理了这段代码。我知道有更简单的方法来完成这个(提升/矩阵等),但我想完成这个并了解我的 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 vector “结果”,它应该在每个玩家每轮的单元格中存储骰子卷。它在执行期间崩溃而没有显示错误。我怀疑这个错误是我在 3d vector 中存储值的方式

最佳答案

你是对的——你的结果变量是整数 vector 的 vector vector 。在你的战斗循环中,你正试图 push_back 进入最里面的 vector ,但外面的两个 vector 还没有定义任何内容。

您还需要 push_back i 和 j 的条目(适当的子类型,例如 vector < vector < int >>,然后是 vector < int >,以这种方式使用 vector 。

编辑

例如:

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;

  }

关于c++ - 3D vector 对象无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9558807/

相关文章:

c++ - 如何指向在另一个类中定义的结构?

c++ - 为自定义 vector 类中的特定元素赋值。作为 [5] = 3 C++

c++ - C++中的抽取

c++ - 多 vector 上的函数

php - 如何从 mySQL 和 PHP 中检索多维数组的结果?

java - 尝试在 java 中设置 double 组时出现 NullPointerException

c++ - 如何在 C++ 中创建 OpenVPN 客户端? (不是一个 tun/tap 经理,一个真正的客户)

c++ - 带有对象 C++ 的填充 vector

scala - 将 Scala 迭代器转换为向量

c - 关于二维数组