指针和引用传递 C++
Pointers and pass by reference c++
在我的 main 中,我调用函数 compute_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)
既然我们知道 指针是邪恶的,让我们用 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) );
}
}
调用时,如果您使用矢量调用,请从参数中删除 &
,如果您使用矢量指针调用,请使用 *
.[=24 取消引用它=]
vector<Symbol>* prob;
for (int i = 0; i < prob.size(); i++) //GIVES ERROR
.....
因为prob是一个指针,所以需要使用->运算符
for (int i = 0; i < prob->size(); i++)
在我的 main 中,我调用函数 compute_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)
既然我们知道 指针是邪恶的,让我们用 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) );
}
}
调用时,如果您使用矢量调用,请从参数中删除 &
,如果您使用矢量指针调用,请使用 *
.[=24 取消引用它=]
vector<Symbol>* prob;
for (int i = 0; i < prob.size(); i++) //GIVES ERROR
.....
因为prob是一个指针,所以需要使用->运算符
for (int i = 0; i < prob->size(); i++)