将 "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
成员。
我有一个名为 "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
成员。