将 "push_back" 用于具有 "get" 函数 C++ 的向量

Using "push_back" for vector with "get" function C++

我有一个名为 "Region" 的 class,还有一个名为 "Map" 的 class。 "Map" class 有一个名为 "regions" 的 "Region *" 类型的向量作为成员。在 "Map" class 的 .cpp 文件中,我有一个 "getRegions" 函数 returns 这个 "regions" 向量。

在main.cpp中,我初始化一个"Region *",调用"australia",然后尝试用"getRegions"函数调用"push_back"函数向量。我以前从未遇到过使用 "push_back" 的问题,但是当我测试这个 "Region *" 是否真的在 "regions" 向量中时,它总是返回为空。

CLion 编译并运行程序没有任何错误。 "push_back" 函数与 "get" 函数一起调用是否错误?

这是驱动代码。

int main() {
    Map map;
    Region *australia;

    map.getRegions().push_back(australia);

    if (map.getRegions().empty()) {
        std::cout << "Empty"; //always prints this for some reason, even though I just pushed it back
    } else {
        std::cout << "Not Empty";
    }

    return 0;
}

阅读按值传递、按引用传递和按指针传递的概念。您的函数 getRegions 可能按值返回成员 意味着您正在创建一个临时副本,并将 australia 添加到副本,而不是实际成员。

如果没有看到你的所有代码,很难判断,但根据你显示的代码和描述的行为,我猜测你的函数看起来像:

auto Map::getRegions() -> std::vector<Region>
{
  // ...
  return regions;
}

这意味着您正在制作矢量的副本,并且您正在 push_back复制到副本上。

相反,您需要这样写:

auto Map::getRegions() -> std::vector<Region> &
{
  // ...
  return regions;
}

以便您 return 引用 regions 成员。