向量被push_back函数覆盖

时间:2019-12-28 12:27:20

标签: c++ vector

这是我在这里的第一个问题,因此可以容忍我的错误。我正在写关于比赛的作业。我需要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";
        }
    }
};

1 个答案:

答案 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");
        }
    }