我一直致力于为代码练习创建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矢量中存储值的方式
答案 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;
}