在我的主程序中,我调用了函数compute_entropy,并给了它一个像这样的向量:float entropy = h.compute_entropy(input_pic [0],&Symbol_table);
在实现函数本身(在h.cpp中)中,我不应更改其采用的参数,即vector * prob。如何访问prob的数据?
float compute_entropy(vector<Symbol>* prob)
{
float ent = 0;
vector<Symbol>* prob;
for (int i = 0; i < prob.size(); i++) //GIVES ERROR
{
ent += (prob.at(i).freq) * log2( 1 / (prob.at(i).freq) );
}
}
因为类型prob
为Vector<Symbol> *
,所以实际上您实际上需要在访问成员之前先解除引用。看起来像(*prob).at(i).freq
。
*(A).B
也可以写成A->B
,因此(*prob).at(i).freq
可以写prob->at(i).freq
。(具有类似的论点prob.size()
成为prob->size()
)
以更简洁的方式进行操作
因为您从不更改向量的内容,所以可以使参数恒定。
float compute_entropy(const vector<Symbol>* prob)
现在我们知道指针是邪恶的,让我们用引用替换指针。
float compute_entropy(const vector<Symbol> &prob)
{
float ent = 0;
for (int i = 0; i < prob.size(); i++) //GIVES ERROR
{
ent += (prob.at(i).freq) * log2( 1 / (prob.at(i).freq) );
}
}
调用此&
函数时,如果要使用vector调用,请从参数中删除the ;如果要使用vector指针调用,请使用取消引用*
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句