【发布时间】:2019-08-15 11:51:48
【问题描述】:
我开始在 c++ 中使用 std::vector 并且想知道是否有更好的方法来编写我的代码。
我尝试直接使用 push_back(本问题末尾的示例),但看起来我无法在 push_back 函数中使用类函数。
这是我要优化的主要部分:
ShopTower st_temp;
vector<ShopTower> shopTower;
st_temp.set("Bow Tower", "images/tower/bowtowerBuy.png", 30, 30, 1);
shopTower.push_back(st_temp);
st_temp.set("Cannon Tower", "images/tower/cannontowerBuy.png", 30, 30, 2);
shopTower.push_back(st_temp);
...
和我的设置函数:
void set(string aName, string aAdr, int aH, int aW, int aNr){
name = aName;
adr = aAdr;
size.set(aH,aW);
setAtBottom(20+((aNr-1)*(aW+20)), 20);
}
为了说明清楚,size.set 是一个简单的 height=ah width=aw 函数,setAtBottom 基本相同,只是设置了从左下角开始计数的位置。
如果可能的话,我想删除 st_temp 变量并将我的代码重写为这样的:
shopTower.push_back(set("Bow Tower", "images/tower/bowtowerBuy.png", 30, 30, 1));
【问题讨论】:
-
为了清楚起见,您应该添加 minimal reproducible example 并解释“似乎不起作用”的含义
-
如果您修改 ShopTower 的构造函数以获取您需要的所有参数。你可以做 shopTower.push_back(ShopTower("Bow Tower", "images/tower/bowtowerBuy.png", 30, 30, 1));
-
@rafaelgonzalez 请使用答案部分的答案。评论无法投票,您的解决方案相当不受欢迎,OP 要求优化,您建议他们创建一个不必要的实例并复制它,这远非最佳
-
@foreknownas_463035818 我希望我的编辑版本是规则确认 - 我实际上认为我的代码示例是最小的可重现示例,如果需要我会添加课程,但我认为因为它应该是最小的我的设置函数解释我上课的内容。我还需要发布我的班级父母,因为 shoptower : myobject 包含类 size(w,h) 和 pos(x,y)。如果它仍然不符合我将尝试再次编辑我的帖子。
-
您的示例仍然无法重现,因为您可以复制并编译它,但至少现在您清楚了“不工作”的含义,并且该示例足以说明原因。
标签: c++ arrays function vector