我一直致力于为代码练习创建一个 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/