gpt4 book ai didi

c++ - vector 中的所有推回值更改为默认值

转载 作者:太空宇宙 更新时间:2023-11-04 15:21:12 24 4
gpt4 key购买 nike

为了减少代码中的多个函数(几乎完全相同),我决定将它们全部合并到一个函数中,该函数接受一个附加参数(实际上是一个具有多个参数的类),然后使用这些值来模仿多个功能会做什么。然后,长话短说,我将每个类声明放入一个 vector 中,现在我的程序似乎功能失调。

我的一个类的多个实例:

FragmentCostParameters commonFCP = FragmentCostParameters(.05, 0);
FragmentCostParameters rareFCP = FragmentCostParameters(.05, 50);
FragmentCostParameters uniqueFCP = FragmentCostParameters(.05, 125);
FragmentCostParameters legendaryFCP = FragmentCostParameters(.02, 175);
FragmentCostParameters crystallineFCP = FragmentCostParameters(.02, 250);
FragmentCostParameters superEliteFCP = FragmentCostParameters(.02, 300);

通过以下方式将其放入 vector 中:

vector<FragmentCostParameters> FCPs(6);

FCPs.push_back(FragmentCostParameters(.05, 0));
FCPs.push_back(FragmentCostParameters(.05, 50));
FCPs.push_back(FragmentCostParameters(.05, 125));
FCPs.push_back(FragmentCostParameters(.02, 175));
FCPs.push_back(FragmentCostParameters(.02, 250));
FCPs.push_back(FragmentCostParameters(.02, 300));

此外,该类定义如下:

class FragmentCostParameters {
public:
double multFactor;
double subtractFactor;
FragmentCostParameters(double _multFactor, double _subtractFactor){
multFactor = _multFactor;
subtractFactor = _subtractFactor;
}
FragmentCostParameters(){
multFactor = .05;
subtractFactor = 0;
}

};

现在,您会注意到 FragmentCostParameters 的默认构造函数涉及设置 multFactor = .05subtractFactor = 0。然而,似乎无论我推回什么,我的 vector 中的每个值都会变成这些值。至少,VS 2011 告诉我这些值等于当我在以下函数的本地范围内查看它们时(这是它们唯一使用的地方)。

int FragmentCost(double skillLevel, int duration, FragmentCostParameters FCP){
return max((int)(ceil(FCP.multFactor*(skillLevel-FCP.subtractFactor))*ceil(duration/30.0)) , 0);
}

唯一调用 FragmentCost 的地方是从下面的这个函数,它应该传递不同的值..但是在这个过程中的某个地方,当我查看 FragmentCost 中的局部变量时,它们是始终是类的构造函数中的默认值。

//given a skill level + duration, will return an array with the fragment usage
int* regularTotalFragCost(int skillLevel, int duration){
int fragments[7] = {0,0,0,0,0,0,0};
fragments[0]+= FragmentCost(skillLevel,duration, FCPs[0]);
fragments[1]+= FragmentCost(skillLevel,duration, FCPs[0]);
fragments[0]+= FragmentCost(skillLevel,duration, FCPs[1]);
fragments[2]+= FragmentCost(skillLevel,duration, FCPs[1]);
fragments[0]+= FragmentCost(skillLevel,duration, FCPs[2]);
fragments[3]+= FragmentCost(skillLevel,duration, FCPs[2]);
fragments[0]+= FragmentCost(skillLevel,duration, FCPs[3]);
fragments[4]+= FragmentCost(skillLevel,duration, FCPs[3]);
fragments[0]+= FragmentCost(skillLevel,duration, FCPs[4]);
fragments[5]+= FragmentCost(skillLevel,duration, FCPs[4]);
fragments[0]+= FragmentCost(skillLevel,duration, FCPs[5]);
fragments[6]+= FragmentCost(skillLevel,duration, FCPs[5]);
return fragments;
}

出于某种原因,我觉得我在某个地方犯了一个非常愚蠢的错误,但对于我来说,我似乎无法弄清楚。如果有人能提供任何帮助和/或建议,我将不胜感激。

编辑:这是 regularTotalFragCostfragments[] 的值 应该 如果一切正常,使用一对测试值(skillLevel = 250duration = 30)

FCPs[0] : Fragments: 13, 13, 0, 0, 0, 0, 0, 
FCPs[1] : Fragments: 17, 15, 2, 0, 0, 0, 0,
FCPs[2] : Fragments: 20, 14, 5, 1, 0, 0, 0,
FCPs[3] : Fragments: 29, 14, 9, 5, 1, 0, 0,
FCPs[4] : Fragments: 32, 13, 10, 7, 2, 0, 0,
FCPs[5] : Fragments: 32, 13, 10, 7, 2, 0, 0,

这是他们现在的样子:

FCPs[0] : Fragments: 78, 13, 13, 13, 13, 13, 13, 
FCPs[1] : Fragments: 78, 13, 13, 13, 13, 13, 13,
FCPs[2] : Fragments: 78, 13, 13, 13, 13, 13, 13,
FCPs[3] : Fragments: 78, 13, 13, 13, 13, 13, 13,
FCPs[4] : Fragments: 78, 13, 13, 13, 13, 13, 13,
FCPs[5] : Fragments: 78, 13, 13, 13, 13, 13, 13,

最佳答案

vector<FragmentCostParameters> FCPs(6);

创建一个包含 6 个默认构造值的 vector ,编号为 0-5。

FCPs.push_back(FragmentCostParameters(.05, 0));

在索引 6 处增加值

关于c++ - vector 中的所有推回值更改为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18808186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com