c++ - 想简化我的 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));
解决方案
这听起来像你想要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);
推荐阅读
- ios - 如何在具有固定高度的特定视图中附加子视图控制器
- ios - 在 iOS13 中重新分配 AVAudioPlayer 实例导致 BAD_ACCESS 运行时错误
- java - 是否有可能在 jpa 中有替代关系
- javascript - 使 Next.js 与 ract-native-web 和 styled-components 一起使用
- ruby-on-rails - 组 has_and_belongs_to_many
- javascript - 刷新网页后如何存储数据?
- r - 使用 minpack.lm 中的 nlsLM 时导致输入参数不正确的原因是什么?
- user-interface - 在 Google Colaboratory 内部使用 NNI
- ios - IOS 13:UITextField rightView 的间距问题
- typescript - 使用 Typescript 的反应式 Vue Chart.js 组件