苦苦挣扎,指向将新内容分配给矢量

时间:2016-10-05 07:58:57

标签: c++ class object vector assign

好的,我要做的是将类的实例添加到向量的特定索引。此索引最初可以不存在,或者是已清除的现有索引,并且正在将新类实例写入该位置。

下面是我一直用来尝试将这些实例写入向量的函数,并在底部注释你可以看到我尝试使用的其他2种方法,显然只有push_back才能添加新的向量最后。

我觉得分配可能只能将数据添加到现有元素?并且该插入可以添加新元素并将现有元素向下移动而不是覆盖。只是想要清楚一点,因为C ++教程已经让我感到困惑。

此外,引用/解除引用/调用Person向量的正确方法是什么(在这种情况下被称为" allthePeople"),以便可以更改其数据?

void createnewPerson(int assignID, RECT startingpoint, vector<Person>* allthePeople, int framenumber) {
    Person newguy(assignID, startingpoint, framenumber);

    std::cout << "New Person ID number: " << newguy.getIDnumber() << std::endl;
    std::cout << "New Person Recent Frame:  " << newguy.getlastframeseen() << std::endl;
    std::cout << "New Person Recent history bottom:  " << newguy.getrecenthistory().bottom << std::endl;
    int place = assignID - 1;

    //This is where I am confused about referencing/dereferencing
    allthePeople->assign(allthePeople->begin() + place, newguy);
    //allthePeople->insert(place, newguy);
    //allthePeople->push_back(newguy);
}

也只是为了澄清,&#34;地点&#34;总是比#34; assignID&#34;少1,因为矢量位置从0开始,我只想在1而不是0开始他们的ID号。

-------------编辑:如果已解决问题,请添加循环-----------------

void createnewPerson(int assignID, RECT startingpoint, vector<Person>* allthePeople, int framenumber) {
    Person newguy(assignID, startingpoint, framenumber);

    std::cout << "New Person ID number: " << newguy.getIDnumber() << std::endl;
    std::cout << "New Person Recent Frame:  " << newguy.getlastframeseen() << std::endl;
    std::cout << "New Person Recent history bottom:  " << newguy.getrecenthistory().bottom << std::endl;
    int place = assignID - 1;

    if (allthePeople->size() > place)
    {
        //assuming places starts from 1 to vector's size.
        (*allthePeople)[place] = newguy;
    }
    else
    {
        allthePeople->push_back(newguy);
    }
}

1 个答案:

答案 0 :(得分:1)

assign旨在替换向量的完整内容。

假设您想要将每个人都放在特定的地方。然后,您可以更好地使用operator []将值放在所需的位置,而不是使用assign。您需要具有适当大小的矢量。

if (allthePeople->size() >= place )
{
    //assuming places starts from 1 to vector's size.
    (*allthePeople)[place - 1] = newguy;    
}