如何从函数返回向量对象?

时间:2015-04-11 11:31:51

标签: c++ vector stl

我试图让这个功能来创建一个新对象,但我无法让它工作。

Main.cpp的:

BaseUnit MyUnits;
vector<BaseUnit> Units;
MyUnits.CreateNewUnit(Units);

BaseUnit.cpp:

BaseUnit::BaseUnit(int ID)
{
    UnitID = ID;
}

..其他代码......

void BaseUnit::CreateNewUnit(vector<BaseUnit> MyVector)
{
    UnitID++;
    BaseUnit NewUnit(UnitID);
    MyVector.push_back(NewUnit);

}

我不知道如何让它返回主代码中的对象Vector。

1 个答案:

答案 0 :(得分:1)

返回修改后的矢量

vector<BaseUnit> BaseUnit::CreateNewUnit(vector<BaseUnit> MyVector) // note the return type
{
    UnitID++;
    BaseUnit NewUnit(UnitID);
    MyVector.push_back(NewUnit);
    return MyVector; // simple as that
}

然后,您可以使用此功能更新原始矢量:

Units = MyUnits.CreateNewUnit(Units);

然而,这将修改向量的副本,然后更改变量Units以引用该新向量(在C ++ 11中),甚至创建它的另一个副本并分配(在C +中) +98),两者效率都不高。相反,直接修改函数中传递的向量,将其作为参考传递,如评论中建议的πάνταῥεῖ:

void BaseUnit::CreateNewUnit(vector<BaseUnit>& MyVector) // note the '&'
{
    UnitID++;
    BaseUnit NewUnit(UnitID);
    MyVector.push_back(NewUnit); // this will now modify the original vector
}

一起使用
MyUnits.CreateNewUnit(Units);

就像你原来的代码一样。