C++ 创建重复对象的向量?

C++ 创建重复对象的向量?,c++,object,vector,C++,Object,Vector,我有一个50大小的向量,向量里面有5个对象。我想复制这5个对象的所有内容,并用它们填充向量的其余部分 我在下面复制的对象正好是I=5,因为我忽略了前4个向量元素 for (int i = 5; i <= CParams::iNumBirds; i++){ m_vpDisplayableObjects[i + 5] = m_vpDisplayableObjects[i]; } 但问题是我想给每个对象一个不同的ID,0-50。见下文 for (int i = 0; i < CP

我有一个50大小的向量,向量里面有5个对象。我想复制这5个对象的所有内容,并用它们填充向量的其余部分

我在下面复制的对象正好是I=5,因为我忽略了前4个向量元素

for (int i = 5; i <= CParams::iNumBirds; i++){
    m_vpDisplayableObjects[i + 5] = m_vpDisplayableObjects[i];
}
但问题是我想给每个对象一个不同的ID,0-50。见下文

for (int i = 0; i < CParams::iNumBirds; i++) {
        m_pMainEngine->GetDisplayableObject(i + 5)->ObjectID = i;
    }
显然,因为它们是副本,所以每5个元素重置ObjectID,所以最终所有对象的ID都是45-50,而不是0-50


我的问题是,如何创建这些对象的副本,但给每个对象一个不同的ObjectID

您可以创建一个函数,将复制对象的属性值复制到新对象,并将新对象的id作为参数传递

 Obj copy(Obj& obj, int id) {
     Obj newObj();
     // copy atributes
     newObj.attribute1 = obj.attribute1;
     //...
     newObj.ObjectID = id;
     return newObj;
}
然后在for循环中调用此函数

for (int i = 5; i <= CParams::iNumBirds; i++){
    m_vpDisplayableObjects[i + 5] = copy(m_vpDisplayableObjects[i], i + 5);
}

不幸的是,同样的问题也会发生,如果我在这里更改ID,ID将只是最近的5个。它不会从0开始,因为它们是重复的,所以当给最新的副本一个ID时,它将覆盖以前的所有副本。因此,您需要使用与原始对象相同的属性值创建一个新对象。如果您发现这很有用,请将问题标记为已回答。因此,即使有100个属性,我也必须手动复制每个属性?据我所知,是的