首页 > 解决方案 > 想简化我的 std::vector push_back 使用

问题描述

我开始在 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));

标签: c++arraysfunctionvector

解决方案


这听起来像你想要emplace_back的。ShopTower::ShopTower(string aName, string aAdr, int aH, int aW, int aNr)如果你还没有,你将需要一个构造函数。

shopTower.emplace_back("Bow Tower", "images/tower/bowtowerBuy.png", 30, 30, 1);
shopTower.emplace_back("Cannon Tower", "images/tower/cannontowerBuy.png", 30, 30, 2);

推荐阅读