矢量被push_back功能覆盖



这是我在这里的第一个问题,所以请容忍我的错误。我正在写关于种族的家庭作业。我需要 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";
}
}
};

起初我不明白制作 2d 矢量的想法,而你只添加 1 个值! 但让我们继续使用您的代码: 在这里你没有初始化对象,所以指针指向其他地方,而不是你试图修改的对象的地址

r->name = "0";

contestants[index].push_back(r);

这里你给每个一维值加r指针,是没有意义的! 你必须从参赛者那里访问赛车手并使用函数来设置名称值,东西会像这样:

for(i=0; i<contestants.size(); i++){
for(j=0; j<contestants[i].size(); j++){
contestants[i][j]->setName("0");
}
}

最新更新