gpt4 book ai didi

c++ - 指针和引用传递 C++

转载 作者:行者123 更新时间:2023-11-28 00:05:47 26 4
gpt4 key购买 nike

在我的 main 中,我调用函数 compute_entropy 并给它一个像这样的 vector :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() )

以更简洁的方式进行
因为您永远不会更改 vector 的内容,所以您可以使参数保持不变。

float compute_entropy(const vector<Symbol>* prob)

既然我们知道指针是邪恶的,让我们用 reference 替换指针.

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 调用,请删除 &从参数中,如果您使用 vector 指针调用,请使用 * 取消引用它.

关于c++ - 指针和引用传递 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35748386/

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