c++ - 如何从函数返回 vector 对象?

标签 c++ vector stl

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

主要.cpp:

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

基础单元.cpp:

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

..其他代码...

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

}

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

最佳答案

返回修改后的 vector

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

然后您可以使用此函数更新原始 vector :

Units = MyUnits.CreateNewUnit(Units);

但是,这将修改 vector 的一个拷贝,然后更改变量 Units 以引用该新 vector (在 C++11 中),或者甚至创建它的另一个拷贝并将其赋值 (在 C++98 中),这两者都不是很有效。要直接修改函数中传递的 vector ,请将其作为引用传递,如评论中建议的 πìντα ῥεῖ:

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);

就像您在原始代码中所做的那样。

关于c++ - 如何从函数返回 vector 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29577375/

相关文章:

用于添加向量元素的 Rcpp 函数

c++ - 操纵 C 风格的字符串?

c++ - QTree控件;在 QTree 中选择多个项目时禁用 ui 功能

c++ - 获取使用 vector 的 cygwin_exception::open_stackdumpfile

c++ - 如何检查元素是否在 std::set 中?

c++ - 优先队列堆化

c++ - 遍历字符串时尝试访问子字符串的编译器错误

c++ - 在模板中存储类成员函数

c++ - 为什么当你没有定义一个函数时你会得到一个链接器错误而不是编译器?

java - java 中的 Push_back 和 pop_back