这是我在这里的第一个问题,因此可以容忍我的错误。我正在写关于比赛的作业。我需要2D向量来存储赛车手的位置,并且在空白处为null
。我遇到了以下问题。通过大量的cout
,我发现push_back
函数每次都会覆盖整个向量。我知道有人问过这个问题,但是我在任何地方都找不到解决方案。
Race
是类,有问题的函数是add_contestant
。
class Race{
public:
int x;
Race(int x){
this->x = x;
}
vector< vector<Racer*> > contestants;
void add_contestant(Racer &moi_chovek){
vector<Racer*> guy_to_add;
guy_to_add.push_back(&moi_chovek);
contestants.push_back(guy_to_add);
int index = contestants.size() - 1;
int i;
Racer *r;
r->name = "0";
for(i=1; i<x; i++){
contestants[index].push_back(r);
}
}
void print_all_contestants_names(){
int i=0,j=0;
for(i=0; i<contestants.size(); i++){
for(j=0; j<contestants[i].size(); j++){
cout<<contestants[i][j]->name<<" ";
}
cout<<"\n";
}
}
};
答案 0 :(得分:0)
起初,我不知道制作2D向量的想法,而你只增加1个值!但让我们保持您的代码: 在这里,您没有初始化对象,因此指针指向的不是您要修改的对象的地址的其他地方
r->name = "0";
...
contestants[index].push_back(r);
在这里,将r指针添加到每个1d值中,这没有任何意义!您必须从参赛者那里访问赛车并使用功能来设置名称值,如下所示:
for(i=0; i<contestants.size(); i++){
for(j=0; j<contestants[i].size(); j++){
contestants[i][j]->setName("0");
}
}